mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01b93b0409 | ||
|
|
9aebdc76b3 | ||
|
|
e9b51fc07a | ||
|
|
abfa355b84 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -69,4 +69,3 @@ win/cglm_test_*
|
|||||||
win/x64
|
win/x64
|
||||||
win/x85
|
win/x85
|
||||||
win/Debug
|
win/Debug
|
||||||
cglm-test-ios*
|
|
||||||
|
|||||||
@@ -57,6 +57,3 @@ after_success:
|
|||||||
--gcov-options '\-lp'
|
--gcov-options '\-lp'
|
||||||
--verbose;
|
--verbose;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
after_failure:
|
|
||||||
- cat ./test-suite.log
|
|
||||||
|
|||||||
9
CREDITS
9
CREDITS
@@ -52,12 +52,3 @@ https://gamedev.stackexchange.com/questions/28395/rotating-vector3-by-a-quaterni
|
|||||||
|
|
||||||
9. Sphere AABB intersect
|
9. Sphere AABB intersect
|
||||||
https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c
|
https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c
|
||||||
|
|
||||||
10. Horizontal add
|
|
||||||
https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-float-vector-sum-on-x86
|
|
||||||
|
|
||||||
11. de casteljau implementation and comments
|
|
||||||
https://forums.khronos.org/showthread.php/10264-Animations-in-1-4-1-release-notes-revision-A/page2?highlight=bezier
|
|
||||||
https://forums.khronos.org/showthread.php/10644-Animation-Bezier-interpolation
|
|
||||||
https://forums.khronos.org/showthread.php/10387-2D-Tangents-in-Bezier-Splines?p=34164&viewfull=1#post34164
|
|
||||||
https://forums.khronos.org/showthread.php/10651-Animation-TCB-Spline-Interpolation-in-COLLADA?highlight=bezier
|
|
||||||
|
|||||||
@@ -82,11 +82,7 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi
|
|||||||
- inline or pre-compiled function call
|
- inline or pre-compiled function call
|
||||||
- frustum (extract view frustum planes, corners...)
|
- frustum (extract view frustum planes, corners...)
|
||||||
- bounding box (AABB in Frustum (culling), crop, merge...)
|
- bounding box (AABB in Frustum (culling), crop, merge...)
|
||||||
- bounding sphere
|
|
||||||
- project, unproject
|
- project, unproject
|
||||||
- easing functions
|
|
||||||
- curves
|
|
||||||
- curve interpolation helpers (S*M*C, deCasteljau...)
|
|
||||||
- and other...
|
- and other...
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
|
|||||||
|
|
||||||
# Description
|
# Description
|
||||||
s.name = "cglm"
|
s.name = "cglm"
|
||||||
s.version = "0.5.1"
|
s.version = "0.4.6"
|
||||||
s.summary = "📽 Optimized OpenGL/Graphics Math (glm) for C"
|
s.summary = "📽 Optimized OpenGL/Graphics Math (glm) for C"
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
cglm is math library for graphics programming for C. It is similar to original glm but it is written for C instead of C++ (you can use here too). See the documentation or README for all features.
|
cglm is math library for graphics programming for C. It is similar to original glm but it is written for C instead of C++ (you can use here too). See the documentation or README for all features.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AC_INIT([cglm], [0.5.4], [info@recp.me])
|
AC_INIT([cglm], [0.5.2], [info@recp.me])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
|
||||||
|
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
@@ -29,7 +29,6 @@ LT_INIT
|
|||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
AC_CHECK_LIB([m], [floor])
|
AC_CHECK_LIB([m], [floor])
|
||||||
|
|
||||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
|
|||||||
@@ -46,5 +46,3 @@ Follow the :doc:`build` documentation for this
|
|||||||
io
|
io
|
||||||
call
|
call
|
||||||
sphere
|
sphere
|
||||||
curve
|
|
||||||
bezier
|
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
.. default-domain:: C
|
|
||||||
|
|
||||||
Bezier
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Header: cglm/bezier.h
|
|
||||||
|
|
||||||
Common helpers for cubic bezier and similar curves.
|
|
||||||
|
|
||||||
Table of contents (click to go):
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Functions:
|
|
||||||
|
|
||||||
1. :c:func:`glm_bezier`
|
|
||||||
2. :c:func:`glm_hermite`
|
|
||||||
3. :c:func:`glm_decasteljau`
|
|
||||||
|
|
||||||
Functions documentation
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. c:function:: float glm_bezier(float s, float p0, float c0, float c1, float p1)
|
|
||||||
|
|
||||||
| cubic bezier interpolation
|
|
||||||
| formula:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
B(s) = P0*(1-s)^3 + 3*C0*s*(1-s)^2 + 3*C1*s^2*(1-s) + P1*s^3
|
|
||||||
|
|
||||||
| similar result using matrix:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
B(s) = glm_smc(t, GLM_BEZIER_MAT, (vec4){p0, c0, c1, p1})
|
|
||||||
|
|
||||||
| glm_eq(glm_smc(...), glm_bezier(...)) should return TRUE
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **s** parameter between 0 and 1
|
|
||||||
| *[in]* **p0** begin point
|
|
||||||
| *[in]* **c0** control point 1
|
|
||||||
| *[in]* **c1** control point 2
|
|
||||||
| *[in]* **p1** end point
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
B(s)
|
|
||||||
|
|
||||||
.. c:function:: float glm_hermite(float s, float p0, float t0, float t1, float p1)
|
|
||||||
|
|
||||||
| cubic hermite interpolation
|
|
||||||
| formula:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
H(s) = P0*(2*s^3 - 3*s^2 + 1) + T0*(s^3 - 2*s^2 + s) + P1*(-2*s^3 + 3*s^2) + T1*(s^3 - s^2)
|
|
||||||
|
|
||||||
| similar result using matrix:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
H(s) = glm_smc(t, GLM_HERMITE_MAT, (vec4){p0, p1, c0, c1})
|
|
||||||
|
|
||||||
| glm_eq(glm_smc(...), glm_hermite(...)) should return TRUE
|
|
||||||
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **s** parameter between 0 and 1
|
|
||||||
| *[in]* **p0** begin point
|
|
||||||
| *[in]* **t0** tangent 1
|
|
||||||
| *[in]* **t1** tangent 2
|
|
||||||
| *[in]* **p1** end point
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
B(s)
|
|
||||||
|
|
||||||
.. c:function:: float glm_decasteljau(float prm, float p0, float c0, float c1, float p1)
|
|
||||||
|
|
||||||
| iterative way to solve cubic equation
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **prm** parameter between 0 and 1
|
|
||||||
| *[in]* **p0** begin point
|
|
||||||
| *[in]* **c0** control point 1
|
|
||||||
| *[in]* **c1** control point 2
|
|
||||||
| *[in]* **p1** end point
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
parameter to use in cubic equation
|
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
Build cglm
|
Building cglm
|
||||||
================================
|
================================
|
||||||
|
|
||||||
| **cglm** does not have external dependencies except for unit testing. When you pulled **cglm** repo with submodules all dependencies will be pulled too. `build-deps.sh` will pull all dependencies/submodules and build for you.
|
| **cglm** does not have external dependencies except for unit testing.
|
||||||
|
| When you pulled cglm repo with submodules all dependencies will be pulled too.
|
||||||
|
| `build-deps.sh` will pull all dependencies/submodules and build for you.
|
||||||
|
|
||||||
External dependencies:
|
External dependencies:
|
||||||
* cmocka - for unit testing
|
* cmocka - for unit testing
|
||||||
@@ -10,8 +12,7 @@ External dependencies:
|
|||||||
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
||||||
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
||||||
|
|
||||||
Unix (Autotools):
|
**Unix (Autotools):**
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
:linenos:
|
:linenos:
|
||||||
@@ -25,12 +26,11 @@ Unix (Autotools):
|
|||||||
$ [sudo] make install # install to system (optional)
|
$ [sudo] make install # install to system (optional)
|
||||||
|
|
||||||
**make** will build cglm to **.libs** sub folder in project folder.
|
**make** will build cglm to **.libs** sub folder in project folder.
|
||||||
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.
|
If you don't want to install cglm to your system's folder you can get static and dynamic libs in this folder.
|
||||||
|
|
||||||
Windows (MSBuild):
|
**Build dependencies (windows):**
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Windows related build files, project files are located in `win` folder,
|
Windows related build files, project files are located in win folder,
|
||||||
make sure you are inside in cglm/win folder.
|
make sure you are inside in cglm/win folder.
|
||||||
|
|
||||||
Code Analysis are enabled, it may take awhile to build.
|
Code Analysis are enabled, it may take awhile to build.
|
||||||
@@ -50,19 +50,3 @@ then try to build with *devenv*:
|
|||||||
$ devenv cglm.sln /Build Release
|
$ devenv cglm.sln /Build Release
|
||||||
|
|
||||||
Currently tests are not available on Windows.
|
Currently tests are not available on Windows.
|
||||||
|
|
||||||
Documentation (Sphinx):
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
**cglm** uses sphinx framework for documentation, it allows lot of formats for documentation. To see all options see sphinx build page:
|
|
||||||
|
|
||||||
https://www.sphinx-doc.org/en/master/man/sphinx-build.html
|
|
||||||
|
|
||||||
Example build:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
:linenos:
|
|
||||||
|
|
||||||
$ cd cglm/docs
|
|
||||||
$ sphinx-build source build
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ author = u'Recep Aslantas'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = u'0.5.4'
|
version = u'0.5.2'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.5.4'
|
release = u'0.5.2'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
@@ -90,7 +90,7 @@ todo_include_todos = False
|
|||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
#
|
#
|
||||||
html_theme = 'sphinx_rtd_theme'
|
html_theme = 'alabaster'
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
@@ -99,13 +99,13 @@ html_theme = 'sphinx_rtd_theme'
|
|||||||
# html_theme_options = {}
|
# html_theme_options = {}
|
||||||
|
|
||||||
html_theme_options = {
|
html_theme_options = {
|
||||||
# 'github_banner': 'true',
|
'github_banner': 'true',
|
||||||
# 'github_button': 'true',
|
'github_button': 'true',
|
||||||
# 'github_user': 'recp',
|
'github_user': 'recp',
|
||||||
# 'github_repo': 'cglm',
|
'github_repo': 'cglm',
|
||||||
# 'travis_button': 'true',
|
'travis_button': 'true',
|
||||||
# 'show_related': 'true',
|
'show_related': 'true',
|
||||||
# 'fixed_sidebar': 'true'
|
'fixed_sidebar': 'true'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
.. default-domain:: C
|
|
||||||
|
|
||||||
Curve
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Header: cglm/curve.h
|
|
||||||
|
|
||||||
Common helpers for common curves. For specific curve see its header/doc
|
|
||||||
e.g bezier
|
|
||||||
|
|
||||||
Table of contents (click to go):
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Functions:
|
|
||||||
|
|
||||||
1. :c:func:`glm_smc`
|
|
||||||
|
|
||||||
Functions documentation
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. c:function:: float glm_smc(float s, mat4 m, vec4 c)
|
|
||||||
|
|
||||||
| helper function to calculate **S** * **M** * **C** multiplication for curves
|
|
||||||
|
|
||||||
| this function does not encourage you to use SMC, instead it is a helper if you use SMC.
|
|
||||||
|
|
||||||
| if you want to specify S as vector then use more generic glm_mat4_rmc() func.
|
|
||||||
|
|
||||||
| Example usage:
|
|
||||||
|
|
||||||
.. code-block:: c
|
|
||||||
|
|
||||||
Bs = glm_smc(s, GLM_BEZIER_MAT, (vec4){p0, c0, c1, p1})
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **s** parameter between 0 and 1 (this will be [s3, s2, s, 1])
|
|
||||||
| *[in]* **m** basis matrix
|
|
||||||
| *[out]* **c** position/control vector
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
scalar value e.g. Bs
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
Features
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
* general purpose matrix operations (mat4, mat3)
|
|
||||||
* chain matrix multiplication (square only)
|
|
||||||
* general purpose vector operations (cross, dot, rotate, proj, angle...)
|
|
||||||
* 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 to matrix
|
|
||||||
* extract euler angles
|
|
||||||
* inline or pre-compiled function call
|
|
||||||
* frustum (extract view frustum planes, corners...)
|
|
||||||
* bounding box (AABB in Frustum (culling), crop, merge...)
|
|
||||||
* bounding sphere
|
|
||||||
* project, unproject
|
|
||||||
* easing functions
|
|
||||||
* curves
|
|
||||||
* curve interpolation helpers (SMC, deCasteljau...)
|
|
||||||
* and other...
|
|
||||||
@@ -9,26 +9,23 @@ Types:
|
|||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
typedef float vec2[2];
|
typedef float vec3[3];
|
||||||
typedef float vec3[3];
|
typedef int ivec3[3];
|
||||||
typedef int ivec3[3];
|
typedef CGLM_ALIGN(16) float vec4[4];
|
||||||
typedef CGLM_ALIGN_IF(16) float vec4[4];
|
|
||||||
typedef vec4 versor;
|
|
||||||
typedef vec3 mat3[3];
|
|
||||||
|
|
||||||
#ifdef __AVX__
|
typedef vec3 mat3[3];
|
||||||
typedef CGLM_ALIGN_IF(32) vec4 mat4[4];
|
typedef vec4 mat4[4];
|
||||||
#else
|
|
||||||
typedef CGLM_ALIGN_IF(16) vec4 mat4[4];
|
typedef vec4 versor;
|
||||||
#endif
|
|
||||||
|
|
||||||
As you can see types don't store extra informations in favor of space.
|
As you can see types don't store extra informations in favor of space.
|
||||||
You can send these values e.g. matrix to OpenGL directly without casting or calling a function like *value_ptr*
|
You can send these values e.g. matrix to OpenGL directly without casting or calling a function like *value_ptr*
|
||||||
|
|
||||||
Alignment Is Required:
|
Alignment is Required:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
**vec4** and **mat4** requires 16 (32 for **mat4** if AVX is enabled) byte alignment because **vec4** and **mat4** operations are vectorized by SIMD instructions (SSE/AVX/NEON).
|
**vec4** and **mat4** requires 16 byte alignment because vec4 and mat4 operations are
|
||||||
|
vectorized by SIMD instructions (SSE/AVX).
|
||||||
|
|
||||||
**UPDATE:**
|
**UPDATE:**
|
||||||
By starting v0.4.5 cglm provides an option to disable alignment requirement, it is enabled as default
|
By starting v0.4.5 cglm provides an option to disable alignment requirement, it is enabled as default
|
||||||
@@ -40,9 +37,10 @@ Alignment Is Required:
|
|||||||
Allocations:
|
Allocations:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
*cglm* doesn't alloc any memory on heap. So it doesn't provide any allocator.
|
*cglm* doesn't alloc any memory on heap. So it doesn't provide any allocator.
|
||||||
You must allocate memory yourself. You should alloc memory for out parameters too if you pass pointer of memory location. When allocating memory, don't forget that **vec4** and **mat4** require alignment.
|
You must allocate memory yourself. You should alloc memory for out parameters too if you pass pointer of memory location.
|
||||||
|
When allocating memory don't forget that **vec4** and **mat4** requires alignment.
|
||||||
|
|
||||||
**NOTE:** Unaligned **vec4** and unaligned **mat4** operations will be supported in the future. Check todo list.
|
**NOTE:** Unaligned vec4 and unaligned mat4 operations will be supported in the future. Check todo list.
|
||||||
Because you may want to multiply a CGLM matrix with external matrix.
|
Because you may want to multiply a CGLM matrix with external matrix.
|
||||||
There is no guarantee that non-CGLM matrix is aligned. Unaligned types will have *u* prefix e.g. **umat4**
|
There is no guarantee that non-CGLM matrix is aligned. Unaligned types will have *u* prefix e.g. **umat4**
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
You can adapt this file completely to your liking, but it should at least
|
You can adapt this file completely to your liking, but it should at least
|
||||||
contain the root `toctree` directive.
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
cglm Documentation
|
Welcome to cglm's documentation!
|
||||||
================================
|
================================
|
||||||
|
|
||||||
**cglm** is optimized 3D math library written in C99 (compatible with C89).
|
**cglm** is optimized 3D math library written in C99 (compatible with C89).
|
||||||
@@ -14,36 +14,33 @@ is considered to be supported as optional.
|
|||||||
|
|
||||||
Also currently only **float** type is supported for most operations.
|
Also currently only **float** type is supported for most operations.
|
||||||
|
|
||||||
.. toctree::
|
**Features**
|
||||||
:maxdepth: 2
|
|
||||||
:caption: Getting Started:
|
* general purpose matrix operations (mat4, mat3)
|
||||||
|
* chain matrix multiplication (square only)
|
||||||
|
* general purpose vector operations (cross, dot, rotate, proj, angle...)
|
||||||
|
* 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 to matrix
|
||||||
|
* extract euler angles
|
||||||
|
* inline or pre-compiled function call
|
||||||
|
* frustum (extract view frustum planes, corners...)
|
||||||
|
* bounding box (AABB in Frustum (culling), crop, merge...)
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:caption: Table Of Contents:
|
||||||
|
|
||||||
features
|
|
||||||
build
|
build
|
||||||
getting_started
|
getting_started
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: How To:
|
|
||||||
|
|
||||||
opengl
|
opengl
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: API:
|
|
||||||
|
|
||||||
api
|
api
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: Options:
|
|
||||||
|
|
||||||
opt
|
opt
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: Troubleshooting:
|
|
||||||
|
|
||||||
troubleshooting
|
troubleshooting
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ Functions:
|
|||||||
1. :c:func:`glm_mat3_copy`
|
1. :c:func:`glm_mat3_copy`
|
||||||
#. :c:func:`glm_mat3_identity`
|
#. :c:func:`glm_mat3_identity`
|
||||||
#. :c:func:`glm_mat3_identity_array`
|
#. :c:func:`glm_mat3_identity_array`
|
||||||
#. :c:func:`glm_mat3_zero`
|
|
||||||
#. :c:func:`glm_mat3_mul`
|
#. :c:func:`glm_mat3_mul`
|
||||||
#. :c:func:`glm_mat3_transpose_to`
|
#. :c:func:`glm_mat3_transpose_to`
|
||||||
#. :c:func:`glm_mat3_transpose`
|
#. :c:func:`glm_mat3_transpose`
|
||||||
@@ -33,7 +32,6 @@ Functions:
|
|||||||
#. :c:func:`glm_mat3_trace`
|
#. :c:func:`glm_mat3_trace`
|
||||||
#. :c:func:`glm_mat3_swap_col`
|
#. :c:func:`glm_mat3_swap_col`
|
||||||
#. :c:func:`glm_mat3_swap_row`
|
#. :c:func:`glm_mat3_swap_row`
|
||||||
#. :c:func:`glm_mat3_rmc`
|
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -61,13 +59,6 @@ Functions documentation
|
|||||||
| *[in,out]* **mat** matrix array (must be aligned (16/32) if alignment is not disabled)
|
| *[in,out]* **mat** matrix array (must be aligned (16/32) if alignment is not disabled)
|
||||||
| *[in]* **count** count of matrices
|
| *[in]* **count** count of matrices
|
||||||
|
|
||||||
.. c:function:: void glm_mat3_zero(mat3 mat)
|
|
||||||
|
|
||||||
make given matrix zero
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in,out]* **mat** matrix to
|
|
||||||
|
|
||||||
.. c:function:: void glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest)
|
.. c:function:: void glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest)
|
||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
@@ -170,20 +161,3 @@ Functions documentation
|
|||||||
| *[in, out]* **mat** matrix
|
| *[in, out]* **mat** matrix
|
||||||
| *[in]* **row1** row1
|
| *[in]* **row1** row1
|
||||||
| *[in]* **row2** row2
|
| *[in]* **row2** row2
|
||||||
|
|
||||||
.. c:function:: float glm_mat3_rmc(vec3 r, mat3 m, vec3 c)
|
|
||||||
|
|
||||||
| **rmc** stands for **Row** * **Matrix** * **Column**
|
|
||||||
|
|
||||||
| helper for R (row vector) * M (matrix) * C (column vector)
|
|
||||||
|
|
||||||
| the result is scalar because R * M = Matrix1x3 (row vector),
|
|
||||||
| then Matrix1x3 * Vec3 (column vector) = Matrix1x1 (Scalar)
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **r** row vector or matrix1x3
|
|
||||||
| *[in]* **m** matrix3x3
|
|
||||||
| *[in]* **c** column vector or matrix3x1
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
scalar value e.g. Matrix1x1
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ Functions:
|
|||||||
#. :c:func:`glm_mat4_copy`
|
#. :c:func:`glm_mat4_copy`
|
||||||
#. :c:func:`glm_mat4_identity`
|
#. :c:func:`glm_mat4_identity`
|
||||||
#. :c:func:`glm_mat4_identity_array`
|
#. :c:func:`glm_mat4_identity_array`
|
||||||
#. :c:func:`glm_mat4_zero`
|
|
||||||
#. :c:func:`glm_mat4_pick3`
|
#. :c:func:`glm_mat4_pick3`
|
||||||
#. :c:func:`glm_mat4_pick3t`
|
#. :c:func:`glm_mat4_pick3t`
|
||||||
#. :c:func:`glm_mat4_ins3`
|
#. :c:func:`glm_mat4_ins3`
|
||||||
@@ -46,7 +45,6 @@ Functions:
|
|||||||
#. :c:func:`glm_mat4_inv_fast`
|
#. :c:func:`glm_mat4_inv_fast`
|
||||||
#. :c:func:`glm_mat4_swap_col`
|
#. :c:func:`glm_mat4_swap_col`
|
||||||
#. :c:func:`glm_mat4_swap_row`
|
#. :c:func:`glm_mat4_swap_row`
|
||||||
#. :c:func:`glm_mat4_rmc`
|
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -82,13 +80,6 @@ Functions documentation
|
|||||||
| *[in,out]* **mat** matrix array (must be aligned (16/32) if alignment is not disabled)
|
| *[in,out]* **mat** matrix array (must be aligned (16/32) if alignment is not disabled)
|
||||||
| *[in]* **count** count of matrices
|
| *[in]* **count** count of matrices
|
||||||
|
|
||||||
.. c:function:: void glm_mat4_zero(mat4 mat)
|
|
||||||
|
|
||||||
make given matrix zero
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in,out]* **mat** matrix to
|
|
||||||
|
|
||||||
.. c:function:: void glm_mat4_pick3(mat4 mat, mat3 dest)
|
.. c:function:: void glm_mat4_pick3(mat4 mat, mat3 dest)
|
||||||
|
|
||||||
copy upper-left of mat4 to mat3
|
copy upper-left of mat4 to mat3
|
||||||
@@ -279,20 +270,3 @@ Functions documentation
|
|||||||
| *[in, out]* **mat** matrix
|
| *[in, out]* **mat** matrix
|
||||||
| *[in]* **row1** row1
|
| *[in]* **row1** row1
|
||||||
| *[in]* **row2** row2
|
| *[in]* **row2** row2
|
||||||
|
|
||||||
.. c:function:: float glm_mat4_rmc(vec4 r, mat4 m, vec4 c)
|
|
||||||
|
|
||||||
| **rmc** stands for **Row** * **Matrix** * **Column**
|
|
||||||
|
|
||||||
| helper for R (row vector) * M (matrix) * C (column vector)
|
|
||||||
|
|
||||||
| the result is scalar because R * M = Matrix1x4 (row vector),
|
|
||||||
| then Matrix1x4 * Vec4 (column vector) = Matrix1x1 (Scalar)
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **r** row vector or matrix1x4
|
|
||||||
| *[in]* **m** matrix4x4
|
|
||||||
| *[in]* **c** column vector or matrix4x1
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
scalar value e.g. Matrix1x1
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ array of matrices:
|
|||||||
|
|
||||||
in this way, passing aray of matrices is same
|
in this way, passing aray of matrices is same
|
||||||
|
|
||||||
Passing / Uniforming Vectors to OpenGL:
|
Passing / Uniforming Vectors to OpenGL:¶
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You don't need to do extra thing when passing cglm vectors to OpengL or other APIs.
|
You don't need to do extra thing when passing cglm vectors to OpengL or other APIs.
|
||||||
|
|||||||
@@ -40,13 +40,3 @@ SSE and SSE2 Shuffle Option
|
|||||||
**_mm_shuffle_ps** generates **shufps** instruction even if registers are same.
|
**_mm_shuffle_ps** generates **shufps** instruction even if registers are same.
|
||||||
You can force it to generate **pshufd** instruction by defining
|
You can force it to generate **pshufd** instruction by defining
|
||||||
**CGLM_USE_INT_DOMAIN** macro. As default it is not defined.
|
**CGLM_USE_INT_DOMAIN** macro. As default it is not defined.
|
||||||
|
|
||||||
SSE3 and SSE4 Dot Product Options
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
You have to extra options for dot product: **CGLM_SSE4_DOT** and **CGLM_SSE3_DOT**.
|
|
||||||
|
|
||||||
- If **SSE4** is enabled then you can define **CGLM_SSE4_DOT** to force cglm to use **_mm_dp_ps** instruction.
|
|
||||||
- If **SSE3** is enabled then you can define **CGLM_SSE3_DOT** to force cglm to use **_mm_hadd_ps** instructions.
|
|
||||||
|
|
||||||
otherwise cglm will use custom cglm's hadd functions which are optimized too.
|
|
||||||
|
|||||||
@@ -58,7 +58,11 @@ Functions:
|
|||||||
#. :c:func:`glm_vec4_minv`
|
#. :c:func:`glm_vec4_minv`
|
||||||
#. :c:func:`glm_vec4_clamp`
|
#. :c:func:`glm_vec4_clamp`
|
||||||
#. :c:func:`glm_vec4_lerp`
|
#. :c:func:`glm_vec4_lerp`
|
||||||
#. :c:func:`glm_vec4_cubic`
|
#. :c:func:`glm_vec4_isnan`
|
||||||
|
#. :c:func:`glm_vec4_isinf`
|
||||||
|
#. :c:func:`glm_vec4_isvalid`
|
||||||
|
#. :c:func:`glm_vec4_sign`
|
||||||
|
#. :c:func:`glm_vec4_sqrt`
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -397,11 +401,3 @@ Functions documentation
|
|||||||
| *[in]* **to** to value
|
| *[in]* **to** to value
|
||||||
| *[in]* **t** interpolant (amount) clamped between 0 and 1
|
| *[in]* **t** interpolant (amount) clamped between 0 and 1
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
.. c:function:: void glm_vec4_cubic(float s, vec4 dest)
|
|
||||||
|
|
||||||
helper to fill vec4 as [S^3, S^2, S, 1]
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **s** parameter
|
|
||||||
| *[out]* **dest** destination
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mul(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mul(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
#ifdef __AVX__
|
#ifdef __AVX__
|
||||||
glm_mul_avx(m1, m2, dest);
|
glm_mul_avx(m1, m2, dest);
|
||||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
@@ -100,7 +100,7 @@ glm_mul(const mat4 m1, const mat4 m2, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mul_rot(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mul_rot_sse2(m1, m2, dest);
|
glm_mul_rot_sse2(m1, m2, dest);
|
||||||
#else
|
#else
|
||||||
@@ -152,7 +152,7 @@ glm_inv_tr(mat4 mat) {
|
|||||||
glm_inv_tr_sse2(mat);
|
glm_inv_tr_sse2(mat);
|
||||||
#else
|
#else
|
||||||
CGLM_ALIGN_MAT mat3 r;
|
CGLM_ALIGN_MAT mat3 r;
|
||||||
CGLM_ALIGN(8) vec3 t;
|
CGLM_ALIGN(16) vec3 t;
|
||||||
|
|
||||||
/* rotate */
|
/* rotate */
|
||||||
glm_mat4_pick3t(mat, r);
|
glm_mat4_pick3t(mat, r);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest);
|
glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by v vector
|
* @brief translate existing transform matrix by v vector
|
||||||
@@ -53,7 +53,7 @@ glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest);
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_translate(mat4 m, const vec3 v) {
|
glm_translate(mat4 m, vec3 v) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(m[3],
|
glmm_store(m[3],
|
||||||
_mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_load(m[0]),
|
_mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_load(m[0]),
|
||||||
@@ -89,7 +89,7 @@ glm_translate(mat4 m, const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_translate_to(const mat4 m, const vec3 v, mat4 dest) {
|
glm_translate_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
glm_mat4_copy(m, dest);
|
glm_mat4_copy(m, dest);
|
||||||
glm_translate(dest, v);
|
glm_translate(dest, v);
|
||||||
}
|
}
|
||||||
@@ -168,7 +168,7 @@ glm_translate_z(mat4 m, float z) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_translate_make(mat4 m, const vec3 v) {
|
glm_translate_make(mat4 m, vec3 v) {
|
||||||
glm_mat4_identity(m);
|
glm_mat4_identity(m);
|
||||||
glm_vec3_copy(v, m[3]);
|
glm_vec3_copy(v, m[3]);
|
||||||
}
|
}
|
||||||
@@ -183,7 +183,7 @@ glm_translate_make(mat4 m, const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_scale_to(const mat4 m, const vec3 v, mat4 dest) {
|
glm_scale_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
glm_vec4_scale(m[0], v[0], dest[0]);
|
glm_vec4_scale(m[0], v[0], dest[0]);
|
||||||
glm_vec4_scale(m[1], v[1], dest[1]);
|
glm_vec4_scale(m[1], v[1], dest[1]);
|
||||||
glm_vec4_scale(m[2], v[2], dest[2]);
|
glm_vec4_scale(m[2], v[2], dest[2]);
|
||||||
@@ -199,7 +199,7 @@ glm_scale_to(const mat4 m, const vec3 v, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_scale_make(mat4 m, const vec3 v) {
|
glm_scale_make(mat4 m, vec3 v) {
|
||||||
glm_mat4_identity(m);
|
glm_mat4_identity(m);
|
||||||
m[0][0] = v[0];
|
m[0][0] = v[0];
|
||||||
m[1][1] = v[1];
|
m[1][1] = v[1];
|
||||||
@@ -215,7 +215,7 @@ glm_scale_make(mat4 m, const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_scale(mat4 m, const vec3 v) {
|
glm_scale(mat4 m, vec3 v) {
|
||||||
glm_scale_to(m, v, m);
|
glm_scale_to(m, v, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +243,7 @@ glm_scale_uni(mat4 m, float s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate_x(const mat4 m, float angle, mat4 dest) {
|
glm_rotate_x(mat4 m, float angle, mat4 dest) {
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
float c, s;
|
float c, s;
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ glm_rotate_x(const mat4 m, float angle, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate_y(const mat4 m, float angle, mat4 dest) {
|
glm_rotate_y(mat4 m, float angle, mat4 dest) {
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
float c, s;
|
float c, s;
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ glm_rotate_y(const mat4 m, float angle, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate_z(const mat4 m, float angle, mat4 dest) {
|
glm_rotate_z(mat4 m, float angle, mat4 dest) {
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
float c, s;
|
float c, s;
|
||||||
|
|
||||||
@@ -319,7 +319,7 @@ glm_rotate_z(const mat4 m, float angle, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate_make(mat4 m, float angle, const vec3 axis) {
|
glm_rotate_make(mat4 m, float angle, vec3 axis) {
|
||||||
CGLM_ALIGN(8) vec3 axisn, v, vs;
|
CGLM_ALIGN(8) vec3 axisn, v, vs;
|
||||||
float c;
|
float c;
|
||||||
|
|
||||||
@@ -350,7 +350,7 @@ glm_rotate_make(mat4 m, float angle, const vec3 axis) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate(mat4 m, float angle, const vec3 axis) {
|
glm_rotate(mat4 m, float angle, vec3 axis) {
|
||||||
CGLM_ALIGN_MAT mat4 rot;
|
CGLM_ALIGN_MAT mat4 rot;
|
||||||
glm_rotate_make(rot, angle, axis);
|
glm_rotate_make(rot, angle, axis);
|
||||||
glm_mul_rot(m, rot, m);
|
glm_mul_rot(m, rot, m);
|
||||||
@@ -367,7 +367,7 @@ glm_rotate(mat4 m, float angle, const vec3 axis) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) {
|
glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
CGLM_ALIGN(8) vec3 pivotInv;
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
glm_vec3_negate_to(pivot, pivotInv);
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
@@ -392,7 +392,7 @@ glm_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) {
|
glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
CGLM_ALIGN(8) vec3 pivotInv;
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
glm_vec3_negate_to(pivot, pivotInv);
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
@@ -410,7 +410,7 @@ glm_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_decompose_scalev(const mat4 m, vec3 s) {
|
glm_decompose_scalev(mat4 m, vec3 s) {
|
||||||
s[0] = glm_vec3_norm(m[0]);
|
s[0] = glm_vec3_norm(m[0]);
|
||||||
s[1] = glm_vec3_norm(m[1]);
|
s[1] = glm_vec3_norm(m[1]);
|
||||||
s[2] = glm_vec3_norm(m[2]);
|
s[2] = glm_vec3_norm(m[2]);
|
||||||
@@ -426,7 +426,7 @@ glm_decompose_scalev(const mat4 m, vec3 s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_uniscaled(const mat4 m) {
|
glm_uniscaled(mat4 m) {
|
||||||
CGLM_ALIGN(8) vec3 s;
|
CGLM_ALIGN(8) vec3 s;
|
||||||
glm_decompose_scalev(m, s);
|
glm_decompose_scalev(m, s);
|
||||||
return glm_vec3_eq_all(s);
|
return glm_vec3_eq_all(s);
|
||||||
@@ -442,7 +442,7 @@ glm_uniscaled(const mat4 m) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_decompose_rs(const mat4 m, mat4 r, vec3 s) {
|
glm_decompose_rs(mat4 m, mat4 r, vec3 s) {
|
||||||
CGLM_ALIGN(16) vec4 t = {0.0f, 0.0f, 0.0f, 1.0f};
|
CGLM_ALIGN(16) vec4 t = {0.0f, 0.0f, 0.0f, 1.0f};
|
||||||
CGLM_ALIGN(8) vec3 v;
|
CGLM_ALIGN(8) vec3 v;
|
||||||
|
|
||||||
@@ -482,7 +482,7 @@ glm_decompose_rs(const mat4 m, mat4 r, vec3 s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_decompose(const mat4 m, vec4 t, mat4 r, vec3 s) {
|
glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s) {
|
||||||
glm_vec4_copy(m[3], t);
|
glm_vec4_copy(m[3], t);
|
||||||
glm_decompose_rs(m, r, s);
|
glm_decompose_rs(m, r, s);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,154 +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_bezier_h
|
|
||||||
#define cglm_bezier_h
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#define GLM_BEZIER_MAT_INIT {{-1.0f, 3.0f, -3.0f, 1.0f}, \
|
|
||||||
{ 3.0f, -6.0f, 3.0f, 0.0f}, \
|
|
||||||
{-3.0f, 3.0f, 0.0f, 0.0f}, \
|
|
||||||
{ 1.0f, 0.0f, 0.0f, 0.0f}}
|
|
||||||
#define GLM_HERMITE_MAT_INIT {{ 2.0f, -3.0f, 0.0f, 1.0f}, \
|
|
||||||
{-2.0f, 3.0f, 0.0f, 0.0f}, \
|
|
||||||
{ 1.0f, -2.0f, 1.0f, 0.0f}, \
|
|
||||||
{ 1.0f, -1.0f, 0.0f, 0.0f}}
|
|
||||||
/* for C only */
|
|
||||||
#define GLM_BEZIER_MAT ((mat4)GLM_BEZIER_MAT_INIT)
|
|
||||||
#define GLM_HERMITE_MAT ((mat4)GLM_HERMITE_MAT_INIT)
|
|
||||||
|
|
||||||
#define CGLM_DECASTEL_EPS 1e-9
|
|
||||||
#define CGLM_DECASTEL_MAX 1000
|
|
||||||
#define CGLM_DECASTEL_SMALL 1e-20
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief cubic bezier interpolation
|
|
||||||
*
|
|
||||||
* Formula:
|
|
||||||
* B(s) = P0*(1-s)^3 + 3*C0*s*(1-s)^2 + 3*C1*s^2*(1-s) + P1*s^3
|
|
||||||
*
|
|
||||||
* similar result using matrix:
|
|
||||||
* B(s) = glm_smc(t, GLM_BEZIER_MAT, (vec4){p0, c0, c1, p1})
|
|
||||||
*
|
|
||||||
* glm_eq(glm_smc(...), glm_bezier(...)) should return TRUE
|
|
||||||
*
|
|
||||||
* @param[in] s parameter between 0 and 1
|
|
||||||
* @param[in] p0 begin point
|
|
||||||
* @param[in] c0 control point 1
|
|
||||||
* @param[in] c1 control point 2
|
|
||||||
* @param[in] p1 end point
|
|
||||||
*
|
|
||||||
* @return B(s)
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_bezier(float s, float p0, float c0, float c1, float p1) {
|
|
||||||
float x, xx, ss, xs3, a;
|
|
||||||
|
|
||||||
x = 1.0f - s;
|
|
||||||
xx = x * x;
|
|
||||||
ss = s * s;
|
|
||||||
xs3 = (s - ss) * 3.0f;
|
|
||||||
a = p0 * xx + c0 * xs3;
|
|
||||||
|
|
||||||
return a + s * (c1 * xs3 + p1 * ss - a);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief cubic hermite interpolation
|
|
||||||
*
|
|
||||||
* Formula:
|
|
||||||
* H(s) = P0*(2*s^3 - 3*s^2 + 1) + T0*(s^3 - 2*s^2 + s)
|
|
||||||
* + P1*(-2*s^3 + 3*s^2) + T1*(s^3 - s^2)
|
|
||||||
*
|
|
||||||
* similar result using matrix:
|
|
||||||
* H(s) = glm_smc(t, GLM_HERMITE_MAT, (vec4){p0, p1, c0, c1})
|
|
||||||
*
|
|
||||||
* glm_eq(glm_smc(...), glm_hermite(...)) should return TRUE
|
|
||||||
*
|
|
||||||
* @param[in] s parameter between 0 and 1
|
|
||||||
* @param[in] p0 begin point
|
|
||||||
* @param[in] t0 tangent 1
|
|
||||||
* @param[in] t1 tangent 2
|
|
||||||
* @param[in] p1 end point
|
|
||||||
*
|
|
||||||
* @return H(s)
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_hermite(float s, float p0, float t0, float t1, float p1) {
|
|
||||||
float ss, d, a, b, c, e, f;
|
|
||||||
|
|
||||||
ss = s * s;
|
|
||||||
a = ss + ss;
|
|
||||||
c = a + ss;
|
|
||||||
b = a * s;
|
|
||||||
d = s * ss;
|
|
||||||
f = d - ss;
|
|
||||||
e = b - c;
|
|
||||||
|
|
||||||
return p0 * (e + 1.0f) + t0 * (f - ss + s) + t1 * f - p1 * e;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief iterative way to solve cubic equation
|
|
||||||
*
|
|
||||||
* @param[in] prm parameter between 0 and 1
|
|
||||||
* @param[in] p0 begin point
|
|
||||||
* @param[in] c0 control point 1
|
|
||||||
* @param[in] c1 control point 2
|
|
||||||
* @param[in] p1 end point
|
|
||||||
*
|
|
||||||
* @return parameter to use in cubic equation
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_decasteljau(float prm, float p0, float c0, float c1, float p1) {
|
|
||||||
float u, v, a, b, c, d, e, f;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (prm - p0 < CGLM_DECASTEL_SMALL)
|
|
||||||
return 0.0f;
|
|
||||||
|
|
||||||
if (p1 - prm < CGLM_DECASTEL_SMALL)
|
|
||||||
return 1.0f;
|
|
||||||
|
|
||||||
u = 0.0f;
|
|
||||||
v = 1.0f;
|
|
||||||
|
|
||||||
for (i = 0; i < CGLM_DECASTEL_MAX; i++) {
|
|
||||||
/* de Casteljau Subdivision */
|
|
||||||
a = (p0 + c0) * 0.5f;
|
|
||||||
b = (c0 + c1) * 0.5f;
|
|
||||||
c = (c1 + p1) * 0.5f;
|
|
||||||
d = (a + b) * 0.5f;
|
|
||||||
e = (b + c) * 0.5f;
|
|
||||||
f = (d + e) * 0.5f; /* this one is on the curve! */
|
|
||||||
|
|
||||||
/* The curve point is close enough to our wanted t */
|
|
||||||
if (fabsf(f - prm) < CGLM_DECASTEL_EPS)
|
|
||||||
return glm_clamp_zo((u + v) * 0.5f);
|
|
||||||
|
|
||||||
/* dichotomy */
|
|
||||||
if (f < prm) {
|
|
||||||
p0 = f;
|
|
||||||
c0 = e;
|
|
||||||
c1 = c;
|
|
||||||
u = (u + v) * 0.5f;
|
|
||||||
} else {
|
|
||||||
c0 = a;
|
|
||||||
c1 = d;
|
|
||||||
p1 = f;
|
|
||||||
v = (u + v) * 0.5f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return glm_clamp_zo((u + v) * 0.5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* cglm_bezier_h */
|
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) {
|
glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) {
|
||||||
vec3 v[2], xa, xb, ya, yb, za, zb;
|
vec3 v[2], xa, xb, ya, yb, za, zb;
|
||||||
|
|
||||||
glm_vec3_scale(m[0], box[0][0], xa);
|
glm_vec3_scale(m[0], box[0][0], xa);
|
||||||
@@ -62,7 +62,7 @@ glm_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) {
|
glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) {
|
||||||
dest[0][0] = glm_min(box1[0][0], box2[0][0]);
|
dest[0][0] = glm_min(box1[0][0], box2[0][0]);
|
||||||
dest[0][1] = glm_min(box1[0][1], box2[0][1]);
|
dest[0][1] = glm_min(box1[0][1], box2[0][1]);
|
||||||
dest[0][2] = glm_min(box1[0][2], box2[0][2]);
|
dest[0][2] = glm_min(box1[0][2], box2[0][2]);
|
||||||
@@ -85,7 +85,7 @@ glm_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) {
|
glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) {
|
||||||
dest[0][0] = glm_max(box[0][0], cropBox[0][0]);
|
dest[0][0] = glm_max(box[0][0], cropBox[0][0]);
|
||||||
dest[0][1] = glm_max(box[0][1], cropBox[0][1]);
|
dest[0][1] = glm_max(box[0][1], cropBox[0][1]);
|
||||||
dest[0][2] = glm_max(box[0][2], cropBox[0][2]);
|
dest[0][2] = glm_max(box[0][2], cropBox[0][2]);
|
||||||
@@ -109,10 +109,10 @@ glm_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_crop_until(const vec3 box[2],
|
glm_aabb_crop_until(vec3 box[2],
|
||||||
const vec3 cropBox[2],
|
vec3 cropBox[2],
|
||||||
const vec3 clampBox[2],
|
vec3 clampBox[2],
|
||||||
vec3 dest[2]) {
|
vec3 dest[2]) {
|
||||||
glm_aabb_crop(box, cropBox, dest);
|
glm_aabb_crop(box, cropBox, dest);
|
||||||
glm_aabb_merge(clampBox, dest, dest);
|
glm_aabb_merge(clampBox, dest, dest);
|
||||||
}
|
}
|
||||||
@@ -133,10 +133,9 @@ glm_aabb_crop_until(const vec3 box[2],
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_aabb_frustum(const vec3 box[2], const vec4 planes[6]) {
|
glm_aabb_frustum(vec3 box[2], vec4 planes[6]) {
|
||||||
const float *p;
|
float *p, dp;
|
||||||
float dp;
|
int i;
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++) {
|
||||||
p = planes[i];
|
p = planes[i];
|
||||||
@@ -170,7 +169,7 @@ glm_aabb_invalidate(vec3 box[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_aabb_isvalid(const vec3 box[2]) {
|
glm_aabb_isvalid(vec3 box[2]) {
|
||||||
return glm_vec3_max(box[0]) != FLT_MAX
|
return glm_vec3_max(box[0]) != FLT_MAX
|
||||||
&& glm_vec3_min(box[1]) != -FLT_MAX;
|
&& glm_vec3_min(box[1]) != -FLT_MAX;
|
||||||
}
|
}
|
||||||
@@ -182,7 +181,7 @@ glm_aabb_isvalid(const vec3 box[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_aabb_size(const vec3 box[2]) {
|
glm_aabb_size(vec3 box[2]) {
|
||||||
return glm_vec3_distance(box[0], box[1]);
|
return glm_vec3_distance(box[0], box[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +192,7 @@ glm_aabb_size(const vec3 box[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_aabb_radius(const vec3 box[2]) {
|
glm_aabb_radius(vec3 box[2]) {
|
||||||
return glm_aabb_size(box) * 0.5f;
|
return glm_aabb_size(box) * 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +204,7 @@ glm_aabb_radius(const vec3 box[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_center(const vec3 box[2], vec3 dest) {
|
glm_aabb_center(vec3 box[2], vec3 dest) {
|
||||||
glm_vec3_center(box[0], box[1], dest);
|
glm_vec3_center(box[0], box[1], dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +216,7 @@ glm_aabb_center(const vec3 box[2], vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_aabb_aabb(const vec3 box[2], const vec3 other[2]) {
|
glm_aabb_aabb(vec3 box[2], vec3 other[2]) {
|
||||||
return (box[0][0] <= other[1][0] && box[1][0] >= other[0][0])
|
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][1] <= other[1][1] && box[1][1] >= other[0][1])
|
||||||
&& (box[0][2] <= other[1][2] && box[1][2] >= other[0][2]);
|
&& (box[0][2] <= other[1][2] && box[1][2] >= other[0][2]);
|
||||||
@@ -234,7 +233,7 @@ glm_aabb_aabb(const vec3 box[2], const vec3 other[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_aabb_sphere(const vec3 box[2], const vec4 s) {
|
glm_aabb_sphere(vec3 box[2], vec4 s) {
|
||||||
float dmin;
|
float dmin;
|
||||||
int a, b, c;
|
int a, b, c;
|
||||||
|
|
||||||
@@ -257,7 +256,7 @@ glm_aabb_sphere(const vec3 box[2], const vec4 s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_aabb_point(const vec3 box[2], const vec3 point) {
|
glm_aabb_point(vec3 box[2], vec3 point) {
|
||||||
return (point[0] >= box[0][0] && point[0] <= box[1][0])
|
return (point[0] >= box[0][0] && point[0] <= box[1][0])
|
||||||
&& (point[1] >= box[0][1] && point[1] <= box[1][1])
|
&& (point[1] >= box[0][1] && point[1] <= box[1][1])
|
||||||
&& (point[2] >= box[0][2] && point[2] <= box[1][2]);
|
&& (point[2] >= box[0][2] && point[2] <= box[1][2]);
|
||||||
@@ -271,7 +270,7 @@ glm_aabb_point(const vec3 box[2], const vec3 point) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_aabb_contains(const vec3 box[2], const vec3 other[2]) {
|
glm_aabb_contains(vec3 box[2], vec3 other[2]) {
|
||||||
return (box[0][0] <= other[0][0] && box[1][0] >= other[1][0])
|
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][1] <= other[0][1] && box[1][1] >= other[1][1])
|
||||||
&& (box[0][2] <= other[0][2] && box[1][2] >= other[1][2]);
|
&& (box[0][2] <= other[0][2] && box[1][2] >= other[1][2]);
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ extern "C" {
|
|||||||
#include "call/project.h"
|
#include "call/project.h"
|
||||||
#include "call/sphere.h"
|
#include "call/sphere.h"
|
||||||
#include "call/ease.h"
|
#include "call/ease.h"
|
||||||
#include "call/curve.h"
|
|
||||||
#include "call/bezier.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,15 +15,15 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_translate_make(mat4 m, const vec3 v);
|
glmc_translate_make(mat4 m, vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_translate_to(const mat4 m, const vec3 v, mat4 dest);
|
glmc_translate_to(mat4 m, vec3 v, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_translate(mat4 m, const vec3 v);
|
glmc_translate(mat4 m, vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -39,15 +39,15 @@ glmc_translate_z(mat4 m, float to);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_scale_make(mat4 m, const vec3 v);
|
glmc_scale_make(mat4 m, vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_scale_to(const mat4 m, const vec3 v, mat4 dest);
|
glmc_scale_to(mat4 m, vec3 v, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_scale(mat4 m, const vec3 v);
|
glmc_scale(mat4 m, vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -55,57 +55,57 @@ glmc_scale_uni(mat4 m, float s);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_x(const mat4 m, float rad, mat4 dest);
|
glmc_rotate_x(mat4 m, float rad, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_y(const mat4 m, float rad, mat4 dest);
|
glmc_rotate_y(mat4 m, float rad, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_z(const mat4 m, float rad, mat4 dest);
|
glmc_rotate_z(mat4 m, float rad, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_make(mat4 m, float angle, const vec3 axis);
|
glmc_rotate_make(mat4 m, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate(mat4 m, float angle, const vec3 axis);
|
glmc_rotate(mat4 m, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis);
|
glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis);
|
glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose_scalev(const mat4 m, vec3 s);
|
glmc_decompose_scalev(mat4 m, vec3 s);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_uniscaled(const mat4 m);
|
glmc_uniscaled(mat4 m);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose_rs(const mat4 m, mat4 r, vec3 s);
|
glmc_decompose_rs(mat4 m, mat4 r, vec3 s);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose(const mat4 m, vec4 t, mat4 r, vec3 s);
|
glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s);
|
||||||
|
|
||||||
/* affine-mat */
|
/* affine-mat */
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mul(const mat4 m1, const mat4 m2, mat4 dest);
|
glmc_mul(mat4 m1, mat4 m2, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mul_rot(const mat4 m1, const mat4 m2, mat4 dest);
|
glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -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 */
|
|
||||||
@@ -15,26 +15,26 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]);
|
glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]);
|
glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]);
|
glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_crop_until(const vec3 box[2],
|
glmc_aabb_crop_until(vec3 box[2],
|
||||||
const vec3 cropBox[2],
|
vec3 cropBox[2],
|
||||||
const vec3 clampBox[2],
|
vec3 clampBox[2],
|
||||||
vec3 dest[2]);
|
vec3 dest[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_frustum(const vec3 box[2], vec4 planes[6]);
|
glmc_aabb_frustum(vec3 box[2], vec4 planes[6]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -42,35 +42,35 @@ glmc_aabb_invalidate(vec3 box[2]);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_isvalid(const vec3 box[2]);
|
glmc_aabb_isvalid(vec3 box[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_aabb_size(const vec3 box[2]);
|
glmc_aabb_size(vec3 box[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_aabb_radius(const vec3 box[2]);
|
glmc_aabb_radius(vec3 box[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_center(const vec3 box[2], vec3 dest);
|
glmc_aabb_center(vec3 box[2], vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_aabb(const vec3 box[2], const vec3 other[2]);
|
glmc_aabb_aabb(vec3 box[2], vec3 other[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_point(const vec3 box[2], const vec3 point);
|
glmc_aabb_point(vec3 box[2], vec3 point);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_contains(const vec3 box[2], const vec3 other[2]);
|
glmc_aabb_contains(vec3 box[2], vec3 other[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_sphere(const vec3 box[2], const vec4 s);
|
glmc_aabb_sphere(vec3 box[2], vec4 s);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ glmc_frustum(float left,
|
|||||||
float top,
|
float top,
|
||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest);
|
mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -31,19 +31,19 @@ glmc_ortho(float left,
|
|||||||
float top,
|
float top,
|
||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest);
|
mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho_aabb(const vec3 box[2], mat4 dest);
|
glmc_ortho_aabb(vec3 box[2], mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest);
|
glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest);
|
glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -59,7 +59,7 @@ glmc_perspective(float fovy,
|
|||||||
float aspect,
|
float aspect,
|
||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest);
|
mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -75,19 +75,19 @@ glmc_perspective_resize(float aspect, mat4 proj);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_lookat(const vec3 eye, const vec3 center, const vec3 up, mat4 dest);
|
glmc_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest);
|
glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_look_anyup(const vec3 eye, const vec3 dir, mat4 dest);
|
glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp(const mat4 proj,
|
glmc_persp_decomp(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearVal,
|
||||||
float * __restrict farVal,
|
float * __restrict farVal,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
@@ -97,45 +97,45 @@ glmc_persp_decomp(const mat4 proj,
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decompv(const mat4 proj, float dest[6]);
|
glmc_persp_decompv(mat4 proj, float dest[6]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_x(const mat4 proj,
|
glmc_persp_decomp_x(mat4 proj,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
float * __restrict right);
|
float * __restrict right);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_y(const mat4 proj,
|
glmc_persp_decomp_y(mat4 proj,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom);
|
float * __restrict bottom);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_z(const mat4 proj,
|
glmc_persp_decomp_z(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearVal,
|
||||||
float * __restrict farVal);
|
float * __restrict farVal);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_far(const mat4 proj, float * __restrict farVal);
|
glmc_persp_decomp_far(mat4 proj, float * __restrict farVal);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_near(const mat4 proj, float * __restrict nearVal);
|
glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_persp_fovy(const mat4 proj);
|
glmc_persp_fovy(mat4 proj);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_persp_aspect(const mat4 proj);
|
glmc_persp_aspect(mat4 proj);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_sizes(const mat4 proj, float fovy, vec4 dest);
|
glmc_persp_sizes(mat4 proj, float fovy, vec4 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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, const mat4 m, const vec4 c);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* cglmc_curve_h */
|
|
||||||
@@ -137,7 +137,4 @@ CGLM_EXPORT
|
|||||||
float
|
float
|
||||||
glmc_ease_bounce_inout(float t);
|
glmc_ease_bounce_inout(float t);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* cglmc_ease_h */
|
#endif /* cglmc_ease_h */
|
||||||
|
|||||||
@@ -15,39 +15,39 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_angles(const mat4 m, vec3 dest);
|
glmc_euler_angles(mat4 m, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler(const vec3 angles, mat4 dest);
|
glmc_euler(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_xyz(const vec3 angles, mat4 dest);
|
glmc_euler_xyz(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_zyx(const vec3 angles, mat4 dest);
|
glmc_euler_zyx(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_zxy(const vec3 angles, mat4 dest);
|
glmc_euler_zxy(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_xzy(const vec3 angles, mat4 dest);
|
glmc_euler_xzy(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_yzx(const vec3 angles, mat4 dest);
|
glmc_euler_yzx(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_yxz(const vec3 angles, mat4 dest);
|
glmc_euler_yxz(vec3 angles, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_by_order(const vec3 angles, glm_euler_sq axis, mat4 dest);
|
glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,26 +15,26 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_planes(const mat4 m, vec4 dest[6]);
|
glmc_frustum_planes(mat4 m, vec4 dest[6]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_corners(const mat4 invMat, vec4 dest[8]);
|
glmc_frustum_corners(mat4 invMat, vec4 dest[8]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_center(const vec4 corners[8], vec4 dest);
|
glmc_frustum_center(vec4 corners[8], vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]);
|
glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_corners_at(const vec4 corners[8],
|
glmc_frustum_corners_at(vec4 corners[8],
|
||||||
float splitDist,
|
float splitDist,
|
||||||
float farDist,
|
float farDist,
|
||||||
vec4 planeCorners[4]);
|
vec4 planeCorners[4]);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -15,28 +15,28 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_print(const mat4 matrix,
|
glmc_mat4_print(mat4 matrix,
|
||||||
FILE * const __restrict ostream);
|
FILE * __restrict ostream);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_print(const mat3 matrix,
|
glmc_mat3_print(mat3 matrix,
|
||||||
FILE * const __restrict ostream);
|
FILE * __restrict ostream);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_print(const vec4 vec,
|
glmc_vec4_print(vec4 vec,
|
||||||
FILE * const __restrict ostream);
|
FILE * __restrict ostream);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_print(const vec3 vec,
|
glmc_vec3_print(vec3 vec,
|
||||||
FILE * const __restrict ostream);
|
FILE * __restrict ostream);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_versor_print(const versor vec,
|
glmc_versor_print(versor vec,
|
||||||
FILE * const __restrict ostream);
|
FILE * __restrict ostream);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_copy(const mat3 mat, mat3 dest);
|
glmc_mat3_copy(mat3 mat, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -26,15 +26,15 @@ glmc_mat3_identity(mat3 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_identity_array(mat3 * const __restrict mat, size_t count);
|
glmc_mat3_identity_array(mat3 * __restrict mat, size_t count);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest);
|
glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_transpose_to(const mat3 m, mat3 dest);
|
glmc_mat3_transpose_to(mat3 m, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -42,15 +42,15 @@ glmc_mat3_transpose(mat3 m);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_mulv(const mat3 m, const vec3 v, vec3 dest);
|
glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat3_trace(const mat3 m);
|
glmc_mat3_trace(mat3 m);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_quat(const mat3 m, versor dest);
|
glmc_mat3_quat(mat3 m, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -58,11 +58,11 @@ glmc_mat3_scale(mat3 m, float s);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat3_det(const mat3 mat);
|
glmc_mat3_det(mat3 mat);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_inv(const mat3 mat, mat3 dest);
|
glmc_mat3_inv(mat3 mat, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -72,10 +72,6 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_mat3_swap_row(mat3 mat, int row1, int row2);
|
glmc_mat3_swap_row(mat3 mat, int row1, int row2);
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
float
|
|
||||||
glmc_mat3_rmc(const vec3 r, const mat3 m, const vec3 c);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_ucopy(const mat4 mat, mat4 dest);
|
glmc_mat4_ucopy(mat4 mat, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_copy(const mat4 mat, mat4 dest);
|
glmc_mat4_copy(mat4 mat, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -31,51 +31,51 @@ glmc_mat4_identity(mat4 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_identity_array(mat4 * const __restrict mat, size_t count);
|
glmc_mat4_identity_array(mat4 * __restrict mat, size_t count);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_pick3(const mat4 mat, mat3 dest);
|
glmc_mat4_pick3(mat4 mat, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_pick3t(const mat4 mat, mat3 dest);
|
glmc_mat4_pick3t(mat4 mat, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_ins3(const mat3 mat, mat4 dest);
|
glmc_mat4_ins3(mat3 mat, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest);
|
glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest);
|
glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mulv(const mat4 m, const vec4 v, vec4 dest);
|
glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest);
|
glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat4_trace(const mat4 m);
|
glmc_mat4_trace(mat4 m);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat4_trace3(const mat4 m);
|
glmc_mat4_trace3(mat4 m);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_quat(const mat4 m, versor dest);
|
glmc_mat4_quat(mat4 m, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_transpose_to(const mat4 m, mat4 dest);
|
glmc_mat4_transpose_to(mat4 m, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -91,19 +91,19 @@ glmc_mat4_scale(mat4 m, float s);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat4_det(const mat4 mat);
|
glmc_mat4_det(mat4 mat);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_inv(const mat4 mat, mat4 dest);
|
glmc_mat4_inv(mat4 mat, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_inv_precise(const mat4 mat, mat4 dest);
|
glmc_mat4_inv_precise(mat4 mat, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_inv_fast(const mat4 mat, mat4 dest);
|
glmc_mat4_inv_fast(mat4 mat, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -113,10 +113,6 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_mat4_swap_row(mat4 mat, int row1, int row2);
|
glmc_mat4_swap_row(mat4 mat, int row1, int row2);
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
float
|
|
||||||
glmc_mat4_rmc(const vec4 r, const mat4 m, const vec4 c);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -15,15 +15,15 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest);
|
glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest);
|
glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest);
|
glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ glmc_quat_identity(versor q);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_identity_array(versor * const __restrict q, size_t count);
|
glmc_quat_identity_array(versor * __restrict q, size_t count);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -31,19 +31,19 @@ glmc_quat(versor q, float angle, float x, float y, float z);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quatv(versor q, float angle, const vec3 axis);
|
glmc_quatv(versor q, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_copy(const versor q, versor dest);
|
glmc_quat_copy(versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_norm(const versor q);
|
glmc_quat_norm(versor q);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_normalize_to(const versor q, versor dest);
|
glmc_quat_normalize_to(versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -51,107 +51,103 @@ glmc_quat_normalize(versor q);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_dot(const versor p, const versor q);
|
glmc_quat_dot(versor p, versor q);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_conjugate(const versor q, versor dest);
|
glmc_quat_conjugate(versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_inv(const versor q, versor dest);
|
glmc_quat_inv(versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_add(const versor p, const versor q, versor dest);
|
glmc_quat_add(versor p, versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_sub(const versor p, const versor q, versor dest);
|
glmc_quat_sub(versor p, versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_real(const versor q);
|
glmc_quat_real(versor q);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_imag(const versor q, vec3 dest);
|
glmc_quat_imag(versor q, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_imagn(const versor q, vec3 dest);
|
glmc_quat_imagn(versor q, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_imaglen(const versor q);
|
glmc_quat_imaglen(versor q);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_angle(const versor q);
|
glmc_quat_angle(versor q);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_axis(const versor q, versor dest);
|
glmc_quat_axis(versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mul(const versor p, const versor q, versor dest);
|
glmc_quat_mul(versor p, versor q, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat4(const versor q, mat4 dest);
|
glmc_quat_mat4(versor q, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat4t(const versor q, mat4 dest);
|
glmc_quat_mat4t(versor q, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat3(const versor q, mat3 dest);
|
glmc_quat_mat3(versor q, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat3t(const versor q, mat3 dest);
|
glmc_quat_mat3t(versor q, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_lerp(const versor from, const versor to, float t, versor dest);
|
glmc_quat_lerp(versor from, versor to, float t, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_slerp(const versor q, const versor r, float t, versor dest);
|
glmc_quat_slerp(versor q, versor r, float t, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_look(const vec3 eye, const versor ori, mat4 dest);
|
glmc_quat_look(vec3 eye, versor ori, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest);
|
glmc_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_forp(const vec3 from,
|
glmc_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest);
|
||||||
const vec3 to,
|
|
||||||
const vec3 fwd,
|
|
||||||
const vec3 up,
|
|
||||||
versor dest);
|
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotatev(const versor from, const vec3 to, vec3 dest);
|
glmc_quat_rotatev(versor from, vec3 to, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotate(const mat4 m, const versor q, mat4 dest);
|
glmc_quat_rotate(mat4 m, versor q, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotate_at(mat4 model, const versor q, const vec3 pivot);
|
glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot);
|
glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,25 +15,22 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_sphere_radii(const vec4 s);
|
glmc_sphere_radii(vec4 s);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_sphere_transform(const vec4 s, const mat4 m, vec4 dest);
|
glmc_sphere_transform(vec4 s, mat4 m, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest);
|
glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_sphere_sphere(const vec4 s1, const vec4 s2);
|
glmc_sphere_sphere(vec4 s1, vec4 s2);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_sphere_point(const vec4 s, const vec3 point);
|
glmc_sphere_point(vec4 s, vec3 point);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* cglmc_sphere_h */
|
#endif /* cglmc_sphere_h */
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3(const vec4 v4, vec3 dest);
|
glmc_vec3(vec4 v4, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_copy(const vec3 a, vec3 dest);
|
glmc_vec3_copy(vec3 a, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -38,27 +38,27 @@ glmc_vec3_one(vec3 v);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_dot(const vec3 a, const vec3 b);
|
glmc_vec3_dot(vec3 a, vec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_cross(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_cross(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_crossn(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_norm(const vec3 v);
|
glmc_vec3_norm(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_norm2(const vec3 v);
|
glmc_vec3_norm2(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_normalize_to(const vec3 v, vec3 dest);
|
glmc_vec3_normalize_to(vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -66,63 +66,63 @@ glmc_vec3_normalize(vec3 v);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_add(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_add(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_adds(const vec3 v, float s, vec3 dest);
|
glmc_vec3_adds(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_sub(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_sub(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_subs(const vec3 v, float s, vec3 dest);
|
glmc_vec3_subs(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_mul(const vec3 a, const vec3 b, vec3 d);
|
glmc_vec3_mul(vec3 a, vec3 b, vec3 d);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_scale(const vec3 v, float s, vec3 dest);
|
glmc_vec3_scale(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_scale_as(const vec3 v, float s, vec3 dest);
|
glmc_vec3_scale_as(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_div(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_div(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_divs(const vec3 a, float s, vec3 dest);
|
glmc_vec3_divs(vec3 a, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_addadd(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_subadd(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_muladd(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_muladds(const vec3 a, float s, vec3 dest);
|
glmc_vec3_muladds(vec3 a, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_minadd(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -130,47 +130,47 @@ glmc_vec3_negate(vec3 v);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_negate_to(const vec3 v, vec3 dest);
|
glmc_vec3_negate_to(vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_angle(const vec3 a, const vec3 b);
|
glmc_vec3_angle(vec3 a, vec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_rotate(vec3 v, float angle, const vec3 axis);
|
glmc_vec3_rotate(vec3 v, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest);
|
glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest);
|
glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_proj(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_proj(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_center(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_center(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_distance2(const vec3 a, const vec3 b);
|
glmc_vec3_distance2(vec3 a, vec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_distance(const vec3 a, const vec3 b);
|
glmc_vec3_distance(vec3 a, vec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_maxv(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_minv(const vec3 a, const vec3 b, vec3 dest);
|
glmc_vec3_minv(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -178,17 +178,17 @@ glmc_vec3_clamp(vec3 v, float minVal, float maxVal);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_ortho(const vec3 v, vec3 dest);
|
glmc_vec3_ortho(vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest);
|
glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest);
|
||||||
|
|
||||||
/* ext */
|
/* ext */
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_mulv(const vec3 a, const vec3 b, vec3 d);
|
glmc_vec3_mulv(vec3 a, vec3 b, vec3 d);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -196,51 +196,51 @@ glmc_vec3_broadcast(float val, vec3 d);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eq(const vec3 v, float val);
|
glmc_vec3_eq(vec3 v, float val);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eq_eps(const vec3 v, float val);
|
glmc_vec3_eq_eps(vec3 v, float val);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eq_all(const vec3 v);
|
glmc_vec3_eq_all(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eqv(const vec3 a, const vec3 b);
|
glmc_vec3_eqv(vec3 a, vec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eqv_eps(const vec3 a, const vec3 b);
|
glmc_vec3_eqv_eps(vec3 a, vec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_max(const vec3 v);
|
glmc_vec3_max(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_min(const vec3 v);
|
glmc_vec3_min(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_isnan(const vec3 v);
|
glmc_vec3_isnan(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_isinf(const vec3 v);
|
glmc_vec3_isinf(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_isvalid(const vec3 v);
|
glmc_vec3_isvalid(vec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_sign(const vec3 v, vec3 dest);
|
glmc_vec3_sign(vec3 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_sqrt(const vec3 v, vec3 dest);
|
glmc_vec3_sqrt(vec3 v, vec3 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4(const vec3 v3, float last, vec4 dest);
|
glmc_vec4(vec3 v3, float last, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -35,31 +35,31 @@ glmc_vec4_one(vec4 v);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_copy3(const vec4 v, vec3 dest);
|
glmc_vec4_copy3(vec4 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_copy(const vec4 v, vec4 dest);
|
glmc_vec4_copy(vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_ucopy(const vec4 v, vec4 dest);
|
glmc_vec4_ucopy(vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_dot(const vec4 a, const vec4 b);
|
glmc_vec4_dot(vec4 a, vec4 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_norm(const vec4 v);
|
glmc_vec4_norm(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_norm2(const vec4 v);
|
glmc_vec4_norm2(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_normalize_to(const vec4 v, vec4 dest);
|
glmc_vec4_normalize_to(vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -67,63 +67,63 @@ glmc_vec4_normalize(vec4 v);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_add(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_add(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_adds(const vec4 v, float s, vec4 dest);
|
glmc_vec4_adds(vec4 v, float s, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_sub(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_sub(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_subs(const vec4 v, float s, vec4 dest);
|
glmc_vec4_subs(vec4 v, float s, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_mul(const vec4 a, const vec4 b, vec4 d);
|
glmc_vec4_mul(vec4 a, vec4 b, vec4 d);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_scale(const vec4 v, float s, vec4 dest);
|
glmc_vec4_scale(vec4 v, float s, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_scale_as(const vec3 v, float s, vec3 dest);
|
glmc_vec4_scale_as(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_div(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_div(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_divs(const vec4 v, float s, vec4 dest);
|
glmc_vec4_divs(vec4 v, float s, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_addadd(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_subadd(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_muladd(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_muladds(const vec4 a, float s, vec4 dest);
|
glmc_vec4_muladds(vec4 a, float s, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_minadd(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -131,19 +131,19 @@ glmc_vec4_negate(vec4 v);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_negate_to(const vec4 v, vec4 dest);
|
glmc_vec4_negate_to(vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_distance(const vec4 a, const vec4 b);
|
glmc_vec4_distance(vec4 a, vec4 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_maxv(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_minv(const vec4 a, const vec4 b, vec4 dest);
|
glmc_vec4_minv(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -151,17 +151,13 @@ glmc_vec4_clamp(vec4 v, float minVal, float maxVal);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest);
|
glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
void
|
|
||||||
glmc_vec4_cubic(float s, vec4 dest);
|
|
||||||
|
|
||||||
/* ext */
|
/* ext */
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_mulv(const vec4 a, const vec4 b, vec4 d);
|
glmc_vec4_mulv(vec4 a, vec4 b, vec4 d);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -169,51 +165,51 @@ glmc_vec4_broadcast(float val, vec4 d);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eq(const vec4 v, float val);
|
glmc_vec4_eq(vec4 v, float val);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eq_eps(const vec4 v, float val);
|
glmc_vec4_eq_eps(vec4 v, float val);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eq_all(const vec4 v);
|
glmc_vec4_eq_all(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eqv(const vec4 a, const vec4 b);
|
glmc_vec4_eqv(vec4 a, vec4 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eqv_eps(const vec4 a, const vec4 b);
|
glmc_vec4_eqv_eps(vec4 a, vec4 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_max(const vec4 v);
|
glmc_vec4_max(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_min(const vec4 v);
|
glmc_vec4_min(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_isnan(const vec4 v);
|
glmc_vec4_isnan(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_isinf(const vec4 v);
|
glmc_vec4_isinf(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_isvalid(const vec4 v);
|
glmc_vec4_isvalid(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_sign(const vec4 v, vec4 dest);
|
glmc_vec4_sign(vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_sqrt(const vec4 v, vec4 dest);
|
glmc_vec4_sqrt(vec4 v, vec4 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ glm_frustum(float left,
|
|||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
float rl, tb, fn, nv;
|
float rl, tb, fn, nv;
|
||||||
|
|
||||||
glm_mat4_zero(dest);
|
glm__memzero(float, dest, sizeof(mat4));
|
||||||
|
|
||||||
rl = 1.0f / (right - left);
|
rl = 1.0f / (right - left);
|
||||||
tb = 1.0f / (top - bottom);
|
tb = 1.0f / (top - bottom);
|
||||||
@@ -122,7 +122,7 @@ glm_ortho(float left,
|
|||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
float rl, tb, fn;
|
float rl, tb, fn;
|
||||||
|
|
||||||
glm_mat4_zero(dest);
|
glm__memzero(float, dest, sizeof(mat4));
|
||||||
|
|
||||||
rl = 1.0f / (right - left);
|
rl = 1.0f / (right - left);
|
||||||
tb = 1.0f / (top - bottom);
|
tb = 1.0f / (top - bottom);
|
||||||
@@ -147,7 +147,7 @@ glm_ortho(float left,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_aabb(const vec3 box[2], mat4 dest) {
|
glm_ortho_aabb(vec3 box[2], mat4 dest) {
|
||||||
glm_ortho(box[0][0], box[1][0],
|
glm_ortho(box[0][0], box[1][0],
|
||||||
box[0][1], box[1][1],
|
box[0][1], box[1][1],
|
||||||
-box[1][2], -box[0][2],
|
-box[1][2], -box[0][2],
|
||||||
@@ -165,7 +165,7 @@ glm_ortho_aabb(const vec3 box[2], mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) {
|
glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) {
|
||||||
glm_ortho(box[0][0] - padding, box[1][0] + padding,
|
glm_ortho(box[0][0] - padding, box[1][0] + padding,
|
||||||
box[0][1] - padding, box[1][1] + padding,
|
box[0][1] - padding, box[1][1] + padding,
|
||||||
-(box[1][2] + padding), -(box[0][2] - padding),
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
@@ -183,7 +183,7 @@ glm_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest) {
|
glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) {
|
||||||
glm_ortho(box[0][0], box[1][0],
|
glm_ortho(box[0][0], box[1][0],
|
||||||
box[0][1], box[1][1],
|
box[0][1], box[1][1],
|
||||||
-(box[1][2] + padding), -(box[0][2] - padding),
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
@@ -218,7 +218,9 @@ glm_ortho_default(float aspect, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_default_s(float aspect, float size, mat4 dest) {
|
glm_ortho_default_s(float aspect,
|
||||||
|
float size,
|
||||||
|
mat4 dest) {
|
||||||
if (aspect >= 1.0f) {
|
if (aspect >= 1.0f) {
|
||||||
glm_ortho(-size * aspect,
|
glm_ortho(-size * aspect,
|
||||||
size * aspect,
|
size * aspect,
|
||||||
@@ -257,7 +259,7 @@ glm_perspective(float fovy,
|
|||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
float f, fn;
|
float f, fn;
|
||||||
|
|
||||||
glm_mat4_zero(dest);
|
glm__memzero(float, dest, sizeof(mat4));
|
||||||
|
|
||||||
f = 1.0f / tanf(fovy * 0.5f);
|
f = 1.0f / tanf(fovy * 0.5f);
|
||||||
fn = 1.0f / (nearVal - farVal);
|
fn = 1.0f / (nearVal - farVal);
|
||||||
@@ -336,10 +338,10 @@ glm_perspective_resize(float aspect, mat4 proj) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_lookat(const vec3 eye,
|
glm_lookat(vec3 eye,
|
||||||
const vec3 center,
|
vec3 center,
|
||||||
const vec3 up,
|
vec3 up,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
CGLM_ALIGN(8) vec3 f, u, s;
|
CGLM_ALIGN(8) vec3 f, u, s;
|
||||||
|
|
||||||
glm_vec3_sub(center, eye, f);
|
glm_vec3_sub(center, eye, f);
|
||||||
@@ -380,7 +382,7 @@ glm_lookat(const vec3 eye,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) {
|
glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
CGLM_ALIGN(8) vec3 target;
|
CGLM_ALIGN(8) vec3 target;
|
||||||
glm_vec3_add(eye, dir, target);
|
glm_vec3_add(eye, dir, target);
|
||||||
glm_lookat(eye, target, up, dest);
|
glm_lookat(eye, target, up, dest);
|
||||||
@@ -398,7 +400,7 @@ glm_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) {
|
glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
CGLM_ALIGN(8) vec3 up;
|
CGLM_ALIGN(8) vec3 up;
|
||||||
glm_vec3_ortho(dir, up);
|
glm_vec3_ortho(dir, up);
|
||||||
glm_look(eye, dir, up, dest);
|
glm_look(eye, dir, up, dest);
|
||||||
@@ -417,7 +419,7 @@ glm_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp(const mat4 proj,
|
glm_persp_decomp(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearVal,
|
||||||
float * __restrict farVal,
|
float * __restrict farVal,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
@@ -457,7 +459,7 @@ glm_persp_decomp(const mat4 proj,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decompv(const mat4 proj, float dest[6]) {
|
glm_persp_decompv(mat4 proj, float dest[6]) {
|
||||||
glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2],
|
glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2],
|
||||||
&dest[3], &dest[4], &dest[5]);
|
&dest[3], &dest[4], &dest[5]);
|
||||||
}
|
}
|
||||||
@@ -472,7 +474,7 @@ glm_persp_decompv(const mat4 proj, float dest[6]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_x(const mat4 proj,
|
glm_persp_decomp_x(mat4 proj,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
float * __restrict right) {
|
float * __restrict right) {
|
||||||
float nearVal, m20, m00;
|
float nearVal, m20, m00;
|
||||||
@@ -495,7 +497,7 @@ glm_persp_decomp_x(const mat4 proj,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_y(const mat4 proj,
|
glm_persp_decomp_y(mat4 proj,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom) {
|
float * __restrict bottom) {
|
||||||
float nearVal, m21, m11;
|
float nearVal, m21, m11;
|
||||||
@@ -518,7 +520,7 @@ glm_persp_decomp_y(const mat4 proj,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_z(const mat4 proj,
|
glm_persp_decomp_z(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearVal,
|
||||||
float * __restrict farVal) {
|
float * __restrict farVal) {
|
||||||
float m32, m22;
|
float m32, m22;
|
||||||
@@ -538,7 +540,7 @@ glm_persp_decomp_z(const mat4 proj,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_far(const mat4 proj, float * __restrict farVal) {
|
glm_persp_decomp_far(mat4 proj, float * __restrict farVal) {
|
||||||
*farVal = proj[3][2] / (proj[2][2] + 1.0f);
|
*farVal = proj[3][2] / (proj[2][2] + 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,7 +552,7 @@ glm_persp_decomp_far(const mat4 proj, float * __restrict farVal) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_near(const mat4 proj, float * __restrict nearVal) {
|
glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) {
|
||||||
*nearVal = proj[3][2] / (proj[2][2] - 1.0f);
|
*nearVal = proj[3][2] / (proj[2][2] - 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -564,7 +566,7 @@ glm_persp_decomp_near(const mat4 proj, float * __restrict nearVal) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_persp_fovy(const mat4 proj) {
|
glm_persp_fovy(mat4 proj) {
|
||||||
return 2.0f * atanf(1.0f / proj[1][1]);
|
return 2.0f * atanf(1.0f / proj[1][1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,7 +577,7 @@ glm_persp_fovy(const mat4 proj) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_persp_aspect(const mat4 proj) {
|
glm_persp_aspect(mat4 proj) {
|
||||||
return proj[1][1] / proj[0][0];
|
return proj[1][1] / proj[0][0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -588,7 +590,7 @@ glm_persp_aspect(const mat4 proj) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_sizes(const mat4 proj, float fovy, vec4 dest) {
|
glm_persp_sizes(mat4 proj, float fovy, vec4 dest) {
|
||||||
float t, a, nearVal, farVal;
|
float t, a, nearVal, farVal;
|
||||||
|
|
||||||
t = 2.0f * tanf(fovy * 0.5f);
|
t = 2.0f * tanf(fovy * 0.5f);
|
||||||
|
|||||||
@@ -26,7 +26,5 @@
|
|||||||
#include "project.h"
|
#include "project.h"
|
||||||
#include "sphere.h"
|
#include "sphere.h"
|
||||||
#include "ease.h"
|
#include "ease.h"
|
||||||
#include "curve.h"
|
|
||||||
#include "bezier.h"
|
|
||||||
|
|
||||||
#endif /* cglm_h */
|
#endif /* cglm_h */
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_luminance(const vec3 rgb) {
|
glm_luminance(vec3 rgb) {
|
||||||
vec3 l = {0.212671f, 0.715160f, 0.072169f};
|
vec3 l = {0.212671f, 0.715160f, 0.072169f};
|
||||||
return glm_dot(rgb, l);
|
return glm_dot(rgb, l);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,8 @@
|
|||||||
#define _USE_MATH_DEFINES /* for windows */
|
#define _USE_MATH_DEFINES /* for windows */
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
# ifdef CGLM_DLL
|
# ifdef CGLM_DLL
|
||||||
@@ -28,6 +26,34 @@
|
|||||||
# define CGLM_INLINE static inline __attribute((always_inline))
|
# define CGLM_INLINE static inline __attribute((always_inline))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define glm__memcpy(type, dest, src, size) \
|
||||||
|
do { \
|
||||||
|
type *srci; \
|
||||||
|
type *srci_end; \
|
||||||
|
type *desti; \
|
||||||
|
\
|
||||||
|
srci = (type *)src; \
|
||||||
|
srci_end = (type *)((char *)srci + size); \
|
||||||
|
desti = (type *)dest; \
|
||||||
|
\
|
||||||
|
while (srci != srci_end) \
|
||||||
|
*desti++ = *srci++; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define glm__memset(type, dest, size, val) \
|
||||||
|
do { \
|
||||||
|
type *desti; \
|
||||||
|
type *desti_end; \
|
||||||
|
\
|
||||||
|
desti = (type *)dest; \
|
||||||
|
desti_end = (type *)((char *)desti + size); \
|
||||||
|
\
|
||||||
|
while (desti != desti_end) \
|
||||||
|
*desti++ = val; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define glm__memzero(type, dest, size) glm__memset(type, dest, size, 0)
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "simd/intrin.h"
|
#include "simd/intrin.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +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_curve_h
|
|
||||||
#define cglm_curve_h
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
#include "vec4.h"
|
|
||||||
#include "mat4.h"
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief helper function to calculate S*M*C multiplication for curves
|
|
||||||
*
|
|
||||||
* This function does not encourage you to use SMC,
|
|
||||||
* instead it is a helper if you use SMC.
|
|
||||||
*
|
|
||||||
* if you want to specify S as vector then use more generic glm_mat4_rmc() func.
|
|
||||||
*
|
|
||||||
* Example usage:
|
|
||||||
* B(s) = glm_smc(s, GLM_BEZIER_MAT, (vec4){p0, c0, c1, p1})
|
|
||||||
*
|
|
||||||
* @param[in] s parameter between 0 and 1 (this will be [s3, s2, s, 1])
|
|
||||||
* @param[in] m basis matrix
|
|
||||||
* @param[in] c position/control vector
|
|
||||||
*
|
|
||||||
* @return B(s)
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_smc(float s, const mat4 m, const vec4 c) {
|
|
||||||
vec4 vs;
|
|
||||||
glm_vec4_cubic(s, vs);
|
|
||||||
return glm_mat4_rmc(vs, m, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* cglm_curve_h */
|
|
||||||
@@ -57,7 +57,7 @@ typedef enum glm_euler_sq {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
glm_euler_sq
|
glm_euler_sq
|
||||||
glm_euler_order(const int ord[3]) {
|
glm_euler_order(int ord[3]) {
|
||||||
return (glm_euler_sq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4);
|
return (glm_euler_sq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ glm_euler_order(const int ord[3]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_angles(const mat4 m, vec3 dest) {
|
glm_euler_angles(mat4 m, vec3 dest) {
|
||||||
float m00, m01, m10, m11, m20, m21, m22;
|
float m00, m01, m10, m11, m20, m21, m22;
|
||||||
float thetaX, thetaY, thetaZ;
|
float thetaX, thetaY, thetaZ;
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ glm_euler_angles(const mat4 m, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_xyz(const vec3 angles, mat4 dest) {
|
glm_euler_xyz(vec3 angles, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz, czsx, cxcz, sysz;
|
sx, sy, sz, czsx, cxcz, sysz;
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ glm_euler_xyz(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler(const vec3 angles, mat4 dest) {
|
glm_euler(vec3 angles, mat4 dest) {
|
||||||
glm_euler_xyz(angles, dest);
|
glm_euler_xyz(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,7 +157,7 @@ glm_euler(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_xzy(const vec3 angles, mat4 dest) {
|
glm_euler_xzy(vec3 angles, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz, sxsy, cysx, cxsy, cxcy;
|
sx, sy, sz, sxsy, cysx, cxsy, cxcy;
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ glm_euler_xzy(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_yxz(const vec3 angles, mat4 dest) {
|
glm_euler_yxz(vec3 angles, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz, cycz, sysz, czsy, cysz;
|
sx, sy, sz, cycz, sysz, czsy, cysz;
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ glm_euler_yxz(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_yzx(const vec3 angles, mat4 dest) {
|
glm_euler_yzx(vec3 angles, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz, sxsy, cxcy, cysx, cxsy;
|
sx, sy, sz, sxsy, cxcy, cysx, cxsy;
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ glm_euler_yzx(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_zxy(const vec3 angles, mat4 dest) {
|
glm_euler_zxy(vec3 angles, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz, cycz, sxsy, cysz;
|
sx, sy, sz, cycz, sxsy, cysz;
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ glm_euler_zxy(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_zyx(const vec3 angles, mat4 dest) {
|
glm_euler_zyx(vec3 angles, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz, czsx, cxcz, sysz;
|
sx, sy, sz, czsx, cxcz, sysz;
|
||||||
|
|
||||||
@@ -352,7 +352,7 @@ glm_euler_zyx(const vec3 angles, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_euler_by_order(const vec3 angles, glm_euler_sq ord, mat4 dest) {
|
glm_euler_by_order(vec3 angles, glm_euler_sq ord, mat4 dest) {
|
||||||
float cx, cy, cz,
|
float cx, cy, cz,
|
||||||
sx, sy, sz;
|
sx, sy, sz;
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_frustum_planes(const mat4 m, vec4 dest[6]) {
|
glm_frustum_planes(mat4 m, vec4 dest[6]) {
|
||||||
mat4 t;
|
mat4 t;
|
||||||
|
|
||||||
glm_mat4_transpose_to(m, t);
|
glm_mat4_transpose_to(m, t);
|
||||||
@@ -114,7 +114,7 @@ glm_frustum_planes(const mat4 m, vec4 dest[6]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_frustum_corners(const mat4 invMat, vec4 dest[8]) {
|
glm_frustum_corners(mat4 invMat, vec4 dest[8]) {
|
||||||
vec4 c[8];
|
vec4 c[8];
|
||||||
|
|
||||||
/* indexOf(nearCoord) = indexOf(farCoord) + 4 */
|
/* indexOf(nearCoord) = indexOf(farCoord) + 4 */
|
||||||
@@ -157,7 +157,7 @@ glm_frustum_corners(const mat4 invMat, vec4 dest[8]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_frustum_center(const vec4 corners[8], vec4 dest) {
|
glm_frustum_center(vec4 corners[8], vec4 dest) {
|
||||||
vec4 center;
|
vec4 center;
|
||||||
|
|
||||||
glm_vec4_copy(corners[0], center);
|
glm_vec4_copy(corners[0], center);
|
||||||
@@ -182,7 +182,7 @@ glm_frustum_center(const vec4 corners[8], vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) {
|
glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) {
|
||||||
vec4 v;
|
vec4 v;
|
||||||
vec3 min, max;
|
vec3 min, max;
|
||||||
int i;
|
int i;
|
||||||
@@ -220,10 +220,10 @@ glm_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_frustum_corners_at(const vec4 corners[8],
|
glm_frustum_corners_at(vec4 corners[8],
|
||||||
float splitDist,
|
float splitDist,
|
||||||
float farDist,
|
float farDist,
|
||||||
vec4 planeCorners[4]) {
|
vec4 planeCorners[4]) {
|
||||||
vec4 corner;
|
vec4 corner;
|
||||||
float dist, sc;
|
float dist, sc;
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_print(const mat4 matrix,
|
glm_mat4_print(mat4 matrix,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
@@ -55,8 +55,8 @@ glm_mat4_print(const mat4 matrix,
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_print(const mat3 matrix,
|
glm_mat3_print(mat3 matrix,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
@@ -85,8 +85,8 @@ glm_mat3_print(const mat3 matrix,
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_print(const vec4 vec,
|
glm_vec4_print(vec4 vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#define m 4
|
#define m 4
|
||||||
@@ -107,8 +107,8 @@ glm_vec4_print(const vec4 vec,
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_print(const vec3 vec,
|
glm_vec3_print(vec3 vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
@@ -129,8 +129,8 @@ glm_vec3_print(const vec3 vec,
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ivec3_print(const ivec3 vec,
|
glm_ivec3_print(ivec3 vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
@@ -151,8 +151,8 @@ glm_ivec3_print(const ivec3 vec,
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_versor_print(const versor vec,
|
glm_versor_print(versor vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#define m 4
|
#define m 4
|
||||||
@@ -173,9 +173,9 @@ glm_versor_print(const versor vec,
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_print(const vec3 bbox[2],
|
glm_aabb_print(vec3 bbox[2],
|
||||||
const char * __restrict tag,
|
const char * __restrict tag,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
|
|||||||
@@ -17,19 +17,16 @@
|
|||||||
CGLM_INLINE void glm_mat3_copy(mat3 mat, mat3 dest);
|
CGLM_INLINE void glm_mat3_copy(mat3 mat, mat3 dest);
|
||||||
CGLM_INLINE void glm_mat3_identity(mat3 mat);
|
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_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_mul(mat3 m1, mat3 m2, mat3 dest);
|
||||||
CGLM_INLINE void glm_mat3_transpose_to(mat3 m, 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_transpose(mat3 m);
|
||||||
CGLM_INLINE void glm_mat3_mulv(mat3 m, vec3 v, vec3 dest);
|
CGLM_INLINE void glm_mat3_mulv(mat3 m, vec3 v, vec3 dest);
|
||||||
CGLM_INLINE float glm_mat3_trace(mat3 m);
|
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 void glm_mat3_scale(mat3 m, float s);
|
||||||
CGLM_INLINE float glm_mat3_det(mat3 mat);
|
CGLM_INLINE float glm_mat3_det(mat3 mat);
|
||||||
CGLM_INLINE void glm_mat3_inv(mat3 mat, mat3 dest);
|
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_col(mat3 mat, int col1, int col2);
|
||||||
CGLM_INLINE void glm_mat3_swap_row(mat3 mat, int row1, int row2);
|
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);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef cglm_mat3_h
|
#ifndef cglm_mat3_h
|
||||||
@@ -65,18 +62,8 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_copy(const mat3 mat, mat3 dest) {
|
glm_mat3_copy(mat3 mat, mat3 dest) {
|
||||||
dest[0][0] = mat[0][0];
|
glm__memcpy(float, dest, mat, sizeof(mat3));
|
||||||
dest[0][1] = mat[0][1];
|
|
||||||
dest[0][2] = mat[0][2];
|
|
||||||
|
|
||||||
dest[1][0] = mat[1][0];
|
|
||||||
dest[1][1] = mat[1][1];
|
|
||||||
dest[1][2] = mat[1][2];
|
|
||||||
|
|
||||||
dest[2][0] = mat[2][0];
|
|
||||||
dest[2][1] = mat[2][1];
|
|
||||||
dest[2][2] = mat[2][2];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -110,7 +97,7 @@ glm_mat3_identity(mat3 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_identity_array(mat3 * const __restrict mat, size_t count) {
|
glm_mat3_identity_array(mat3 * __restrict mat, size_t count) {
|
||||||
CGLM_ALIGN_MAT mat3 t = GLM_MAT3_IDENTITY_INIT;
|
CGLM_ALIGN_MAT mat3 t = GLM_MAT3_IDENTITY_INIT;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@@ -119,18 +106,6 @@ glm_mat3_identity_array(mat3 * const __restrict mat, size_t count) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief make given matrix zero.
|
|
||||||
*
|
|
||||||
* @param[in, out] mat matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_mat3_zero(mat3 mat) {
|
|
||||||
CGLM_ALIGN_MAT mat3 t = GLM_MAT3_ZERO_INIT;
|
|
||||||
glm_mat3_copy(t, mat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
@@ -147,7 +122,7 @@ glm_mat3_zero(mat3 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) {
|
glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat3_mul_sse2(m1, m2, dest);
|
glm_mat3_mul_sse2(m1, m2, dest);
|
||||||
#else
|
#else
|
||||||
@@ -181,7 +156,7 @@ glm_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_transpose_to(const mat3 m, mat3 dest) {
|
glm_mat3_transpose_to(mat3 m, mat3 dest) {
|
||||||
dest[0][0] = m[0][0];
|
dest[0][0] = m[0][0];
|
||||||
dest[0][1] = m[1][0];
|
dest[0][1] = m[1][0];
|
||||||
dest[0][2] = m[2][0];
|
dest[0][2] = m[2][0];
|
||||||
@@ -227,7 +202,7 @@ glm_mat3_transpose(mat3 m) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) {
|
glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) {
|
||||||
dest[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2];
|
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[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];
|
dest[2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2];
|
||||||
@@ -242,7 +217,7 @@ glm_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_mat3_trace(const mat3 m) {
|
glm_mat3_trace(mat3 m) {
|
||||||
return m[0][0] + m[1][1] + m[2][2];
|
return m[0][0] + m[1][1] + m[2][2];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +229,7 @@ glm_mat3_trace(const mat3 m) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_quat(const mat3 m, versor dest) {
|
glm_mat3_quat(mat3 m, versor dest) {
|
||||||
float trace, r, rinv;
|
float trace, r, rinv;
|
||||||
|
|
||||||
/* it seems using like m12 instead of m[1][2] causes extra instructions */
|
/* it seems using like m12 instead of m[1][2] causes extra instructions */
|
||||||
@@ -320,7 +295,7 @@ glm_mat3_scale(mat3 m, float s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_mat3_det(const mat3 mat) {
|
glm_mat3_det(mat3 mat) {
|
||||||
float a = mat[0][0], b = mat[0][1], c = mat[0][2],
|
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],
|
d = mat[1][0], e = mat[1][1], f = mat[1][2],
|
||||||
g = mat[2][0], h = mat[2][1], i = mat[2][2];
|
g = mat[2][0], h = mat[2][1], i = mat[2][2];
|
||||||
@@ -336,7 +311,7 @@ glm_mat3_det(const mat3 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_inv(const mat3 mat, mat3 dest) {
|
glm_mat3_inv(mat3 mat, mat3 dest) {
|
||||||
float det;
|
float det;
|
||||||
float a = mat[0][0], b = mat[0][1], c = mat[0][2],
|
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],
|
d = mat[1][0], e = mat[1][1], f = mat[1][2],
|
||||||
@@ -397,26 +372,4 @@ glm_mat3_swap_row(mat3 mat, int row1, int row2) {
|
|||||||
mat[2][row2] = tmp[2];
|
mat[2][row2] = tmp[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief helper for R (row vector) * M (matrix) * C (column vector)
|
|
||||||
*
|
|
||||||
* rmc stands for Row * Matrix * Column
|
|
||||||
*
|
|
||||||
* the result is scalar because R * M = Matrix1x3 (row vector),
|
|
||||||
* then Matrix1x3 * Vec3 (column vector) = Matrix1x1 (Scalar)
|
|
||||||
*
|
|
||||||
* @param[in] r row vector or matrix1x3
|
|
||||||
* @param[in] m matrix3x3
|
|
||||||
* @param[in] c column vector or matrix3x1
|
|
||||||
*
|
|
||||||
* @return scalar value e.g. Matrix1x1
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_mat3_rmc(const vec3 r, const mat3 m, const vec3 c) {
|
|
||||||
vec3 tmp;
|
|
||||||
glm_mat3_mulv(m, c, tmp);
|
|
||||||
return glm_vec3_dot(r, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* cglm_mat3_h */
|
#endif /* cglm_mat3_h */
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
CGLM_INLINE void glm_mat4_copy(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(mat4 mat);
|
||||||
CGLM_INLINE void glm_mat4_identity_array(mat4 * restrict mat, size_t count);
|
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_pick3(mat4 mat, mat3 dest);
|
||||||
CGLM_INLINE void glm_mat4_pick3t(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_ins3(mat3 mat, mat4 dest);
|
||||||
@@ -32,7 +31,6 @@
|
|||||||
CGLM_INLINE void glm_mat4_mulv3(mat4 m, vec3 v, vec3 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_trace(mat4 m);
|
||||||
CGLM_INLINE float glm_mat4_trace3(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_to(mat4 m, mat4 dest);
|
||||||
CGLM_INLINE void glm_mat4_transpose(mat4 m);
|
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_p(mat4 m, float s);
|
||||||
@@ -42,7 +40,6 @@
|
|||||||
CGLM_INLINE void glm_mat4_inv_fast(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_col(mat4 mat, int col1, int col2);
|
||||||
CGLM_INLINE void glm_mat4_swap_row(mat4 mat, int row1, int row2);
|
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);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef cglm_mat_h
|
#ifndef cglm_mat_h
|
||||||
@@ -100,16 +97,8 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_ucopy(const mat4 mat, mat4 dest) {
|
glm_mat4_ucopy(mat4 mat, mat4 dest) {
|
||||||
dest[0][0] = mat[0][0]; dest[1][0] = mat[1][0];
|
glm__memcpy(float, dest, mat, sizeof(mat4));
|
||||||
dest[0][1] = mat[0][1]; dest[1][1] = mat[1][1];
|
|
||||||
dest[0][2] = mat[0][2]; dest[1][2] = mat[1][2];
|
|
||||||
dest[0][3] = mat[0][3]; dest[1][3] = mat[1][3];
|
|
||||||
|
|
||||||
dest[2][0] = mat[2][0]; dest[3][0] = mat[3][0];
|
|
||||||
dest[2][1] = mat[2][1]; dest[3][1] = mat[3][1];
|
|
||||||
dest[2][2] = mat[2][2]; dest[3][2] = mat[3][2];
|
|
||||||
dest[2][3] = mat[2][3]; dest[3][3] = mat[3][3];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -120,7 +109,7 @@ glm_mat4_ucopy(const mat4 mat, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_copy(const mat4 mat, mat4 dest) {
|
glm_mat4_copy(mat4 mat, mat4 dest) {
|
||||||
#ifdef __AVX__
|
#ifdef __AVX__
|
||||||
glmm_store256(dest[0], glmm_load256(mat[0]));
|
glmm_store256(dest[0], glmm_load256(mat[0]));
|
||||||
glmm_store256(dest[2], glmm_load256(mat[2]));
|
glmm_store256(dest[2], glmm_load256(mat[2]));
|
||||||
@@ -129,11 +118,6 @@ glm_mat4_copy(const mat4 mat, mat4 dest) {
|
|||||||
glmm_store(dest[1], glmm_load(mat[1]));
|
glmm_store(dest[1], glmm_load(mat[1]));
|
||||||
glmm_store(dest[2], glmm_load(mat[2]));
|
glmm_store(dest[2], glmm_load(mat[2]));
|
||||||
glmm_store(dest[3], glmm_load(mat[3]));
|
glmm_store(dest[3], glmm_load(mat[3]));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest[0], vld1q_f32(mat[0]));
|
|
||||||
vst1q_f32(dest[1], vld1q_f32(mat[1]));
|
|
||||||
vst1q_f32(dest[2], vld1q_f32(mat[2]));
|
|
||||||
vst1q_f32(dest[3], vld1q_f32(mat[3]));
|
|
||||||
#else
|
#else
|
||||||
glm_mat4_ucopy(mat, dest);
|
glm_mat4_ucopy(mat, dest);
|
||||||
#endif
|
#endif
|
||||||
@@ -170,7 +154,7 @@ glm_mat4_identity(mat4 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_identity_array(mat4 * const __restrict mat, size_t count) {
|
glm_mat4_identity_array(mat4 * __restrict mat, size_t count) {
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@@ -179,18 +163,6 @@ glm_mat4_identity_array(mat4 * const __restrict mat, size_t count) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief make given matrix zero.
|
|
||||||
*
|
|
||||||
* @param[in, out] mat matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_mat4_zero(mat4 mat) {
|
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_ZERO_INIT;
|
|
||||||
glm_mat4_copy(t, mat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief copy upper-left of mat4 to mat3
|
* @brief copy upper-left of mat4 to mat3
|
||||||
*
|
*
|
||||||
@@ -199,7 +171,7 @@ glm_mat4_zero(mat4 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_pick3(const mat4 mat, mat3 dest) {
|
glm_mat4_pick3(mat4 mat, mat3 dest) {
|
||||||
dest[0][0] = mat[0][0];
|
dest[0][0] = mat[0][0];
|
||||||
dest[0][1] = mat[0][1];
|
dest[0][1] = mat[0][1];
|
||||||
dest[0][2] = mat[0][2];
|
dest[0][2] = mat[0][2];
|
||||||
@@ -223,7 +195,7 @@ glm_mat4_pick3(const mat4 mat, mat3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_pick3t(const mat4 mat, mat3 dest) {
|
glm_mat4_pick3t(mat4 mat, mat3 dest) {
|
||||||
dest[0][0] = mat[0][0];
|
dest[0][0] = mat[0][0];
|
||||||
dest[0][1] = mat[1][0];
|
dest[0][1] = mat[1][0];
|
||||||
dest[0][2] = mat[2][0];
|
dest[0][2] = mat[2][0];
|
||||||
@@ -245,7 +217,7 @@ glm_mat4_pick3t(const mat4 mat, mat3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_ins3(const mat3 mat, mat4 dest) {
|
glm_mat4_ins3(mat3 mat, mat4 dest) {
|
||||||
dest[0][0] = mat[0][0];
|
dest[0][0] = mat[0][0];
|
||||||
dest[0][1] = mat[0][1];
|
dest[0][1] = mat[0][1];
|
||||||
dest[0][2] = mat[0][2];
|
dest[0][2] = mat[0][2];
|
||||||
@@ -275,12 +247,12 @@ glm_mat4_ins3(const mat3 mat, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
#ifdef __AVX__
|
#ifdef __AVX__
|
||||||
glm_mat4_mul_avx(m1, m2, dest);
|
glm_mat4_mul_avx(m1, m2, dest);
|
||||||
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_mul_sse2(m1, m2, dest);
|
glm_mat4_mul_sse2(m1, m2, dest);
|
||||||
#elif defined(CGLM_NEON_FP)
|
#elif defined( __ARM_NEON_FP )
|
||||||
glm_mat4_mul_neon(m1, m2, dest);
|
glm_mat4_mul_neon(m1, m2, dest);
|
||||||
#else
|
#else
|
||||||
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2], a03 = m1[0][3],
|
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2], a03 = m1[0][3],
|
||||||
@@ -333,7 +305,7 @@ glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) {
|
glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) {
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@@ -355,7 +327,7 @@ glm_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) {
|
glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_mulv_sse2(m, v, dest);
|
glm_mat4_mulv_sse2(m, v, dest);
|
||||||
#else
|
#else
|
||||||
@@ -377,7 +349,7 @@ glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_mat4_trace(const mat4 m) {
|
glm_mat4_trace(mat4 m) {
|
||||||
return m[0][0] + m[1][1] + m[2][2] + m[3][3];
|
return m[0][0] + m[1][1] + m[2][2] + m[3][3];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,7 +362,7 @@ glm_mat4_trace(const mat4 m) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_mat4_trace3(const mat4 m) {
|
glm_mat4_trace3(mat4 m) {
|
||||||
return m[0][0] + m[1][1] + m[2][2];
|
return m[0][0] + m[1][1] + m[2][2];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +374,7 @@ glm_mat4_trace3(const mat4 m) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_quat(const mat4 m, versor dest) {
|
glm_mat4_quat(mat4 m, versor dest) {
|
||||||
float trace, r, rinv;
|
float trace, r, rinv;
|
||||||
|
|
||||||
/* it seems using like m12 instead of m[1][2] causes extra instructions */
|
/* it seems using like m12 instead of m[1][2] causes extra instructions */
|
||||||
@@ -453,7 +425,7 @@ glm_mat4_quat(const mat4 m, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) {
|
glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) {
|
||||||
vec4 res;
|
vec4 res;
|
||||||
glm_vec4(v, last, res);
|
glm_vec4(v, last, res);
|
||||||
glm_mat4_mulv(m, res, res);
|
glm_mat4_mulv(m, res, res);
|
||||||
@@ -470,7 +442,7 @@ glm_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_transpose_to(const mat4 m, mat4 dest) {
|
glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_transp_sse2(m, dest);
|
glm_mat4_transp_sse2(m, dest);
|
||||||
#else
|
#else
|
||||||
@@ -497,8 +469,10 @@ glm_mat4_transpose(mat4 m) {
|
|||||||
glm_mat4_transp_sse2(m, m);
|
glm_mat4_transp_sse2(m, m);
|
||||||
#else
|
#else
|
||||||
mat4 d;
|
mat4 d;
|
||||||
|
|
||||||
glm_mat4_transpose_to(m, d);
|
glm_mat4_transpose_to(m, d);
|
||||||
glm_mat4_ucopy(d, m);
|
|
||||||
|
glm__memcpy(float, m, d, sizeof(mat4));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -530,15 +504,10 @@ glm_mat4_scale_p(mat4 m, float s) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_scale(mat4 m, float s) {
|
glm_mat4_scale(mat4 m, float s) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#ifdef __AVX__
|
||||||
|
glm_mat4_scale_avx(m, s);
|
||||||
|
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_scale_sse2(m, s);
|
glm_mat4_scale_sse2(m, s);
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
float32x4_t v0;
|
|
||||||
v0 = vdupq_n_f32(s);
|
|
||||||
vst1q_f32(m[0], vmulq_f32(vld1q_f32(m[0]), v0));
|
|
||||||
vst1q_f32(m[1], vmulq_f32(vld1q_f32(m[1]), v0));
|
|
||||||
vst1q_f32(m[2], vmulq_f32(vld1q_f32(m[2]), v0));
|
|
||||||
vst1q_f32(m[3], vmulq_f32(vld1q_f32(m[3]), v0));
|
|
||||||
#else
|
#else
|
||||||
glm_mat4_scale_p(m, s);
|
glm_mat4_scale_p(m, s);
|
||||||
#endif
|
#endif
|
||||||
@@ -553,7 +522,7 @@ glm_mat4_scale(mat4 m, float s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_mat4_det(const mat4 mat) {
|
glm_mat4_det(mat4 mat) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
return glm_mat4_det_sse2(mat);
|
return glm_mat4_det_sse2(mat);
|
||||||
#else
|
#else
|
||||||
@@ -586,8 +555,10 @@ glm_mat4_det(const mat4 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_inv(const mat4 mat, mat4 dest) {
|
glm_mat4_inv(mat4 mat, mat4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#ifdef __AVX__
|
||||||
|
glm_mat4_inv_avx(mat, dest);
|
||||||
|
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_inv_sse2(mat, dest);
|
glm_mat4_inv_sse2(mat, dest);
|
||||||
#else
|
#else
|
||||||
float t[6];
|
float t[6];
|
||||||
@@ -647,8 +618,10 @@ glm_mat4_inv(const mat4 mat, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_inv_fast(const mat4 mat, mat4 dest) {
|
glm_mat4_inv_fast(mat4 mat, mat4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#ifdef __AVX__
|
||||||
|
glm_mat4_inv_fast_avx(mat, dest);
|
||||||
|
#elif defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glm_mat4_inv_fast_sse2(mat, dest);
|
glm_mat4_inv_fast_sse2(mat, dest);
|
||||||
#else
|
#else
|
||||||
glm_mat4_inv(mat, dest);
|
glm_mat4_inv(mat, dest);
|
||||||
@@ -680,7 +653,7 @@ glm_mat4_swap_col(mat4 mat, int col1, int col2) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_swap_row(mat4 mat, const int row1, const int row2) {
|
glm_mat4_swap_row(mat4 mat, int row1, int row2) {
|
||||||
CGLM_ALIGN(16) vec4 tmp;
|
CGLM_ALIGN(16) vec4 tmp;
|
||||||
tmp[0] = mat[0][row1];
|
tmp[0] = mat[0][row1];
|
||||||
tmp[1] = mat[1][row1];
|
tmp[1] = mat[1][row1];
|
||||||
@@ -698,26 +671,4 @@ glm_mat4_swap_row(mat4 mat, const int row1, const int row2) {
|
|||||||
mat[3][row2] = tmp[3];
|
mat[3][row2] = tmp[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief helper for R (row vector) * M (matrix) * C (column vector)
|
|
||||||
*
|
|
||||||
* rmc stands for Row * Matrix * Column
|
|
||||||
*
|
|
||||||
* the result is scalar because R * M = Matrix1x4 (row vector),
|
|
||||||
* then Matrix1x4 * Vec4 (column vector) = Matrix1x1 (Scalar)
|
|
||||||
*
|
|
||||||
* @param[in] r row vector or matrix1x4
|
|
||||||
* @param[in] m matrix4x4
|
|
||||||
* @param[in] c column vector or matrix4x1
|
|
||||||
*
|
|
||||||
* @return scalar value e.g. B(s)
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_mat4_rmc(const vec4 r, const mat4 m, const vec4 c) {
|
|
||||||
vec4 tmp;
|
|
||||||
glm_mat4_mulv(m, c, tmp);
|
|
||||||
return glm_vec4_dot(r, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* cglm_mat_h */
|
#endif /* cglm_mat_h */
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
#ifndef cglm_project_h
|
#ifndef cglm_project_h
|
||||||
#define cglm_project_h
|
#define cglm_project_h
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
#include "vec3.h"
|
#include "vec3.h"
|
||||||
#include "vec4.h"
|
#include "vec4.h"
|
||||||
#include "mat4.h"
|
#include "mat4.h"
|
||||||
@@ -41,7 +40,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) {
|
glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) {
|
||||||
vec4 v;
|
vec4 v;
|
||||||
|
|
||||||
v[0] = 2.0f * (pos[0] - vp[0]) / vp[2] - 1.0f;
|
v[0] = 2.0f * (pos[0] - vp[0]) / vp[2] - 1.0f;
|
||||||
@@ -80,7 +79,7 @@ glm_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) {
|
glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
||||||
mat4 inv;
|
mat4 inv;
|
||||||
glm_mat4_inv(m, inv);
|
glm_mat4_inv(m, inv);
|
||||||
glm_unprojecti(pos, inv, vp, dest);
|
glm_unprojecti(pos, inv, vp, dest);
|
||||||
@@ -100,7 +99,7 @@ glm_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) {
|
glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
||||||
CGLM_ALIGN(16) vec4 pos4, vone = GLM_VEC4_ONE_INIT;
|
CGLM_ALIGN(16) vec4 pos4, vone = GLM_VEC4_ONE_INIT;
|
||||||
|
|
||||||
glm_vec4(pos, 1.0f, pos4);
|
glm_vec4(pos, 1.0f, pos4);
|
||||||
|
|||||||
@@ -68,15 +68,15 @@ glm_mat4_identity(mat4 mat);
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest);
|
glm_mat4_mulv(mat4 m, vec4 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mul_rot(const mat4 m1, const mat4 m2, mat4 dest);
|
glm_mul_rot(mat4 m1, mat4 m2, mat4 dest);
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_translate(mat4 m, const vec3 v);
|
glm_translate(mat4 m, vec3 v);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IMPORTANT:
|
* IMPORTANT:
|
||||||
@@ -113,7 +113,7 @@ glm_quat_identity(versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_identity_array(versor * const __restrict q, size_t count) {
|
glm_quat_identity_array(versor * __restrict q, size_t count) {
|
||||||
CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT;
|
CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ glm_quat_init(versor q, float x, float y, float z, float w) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quatv(versor q, float angle, const vec3 axis) {
|
glm_quatv(versor q, float angle, vec3 axis) {
|
||||||
CGLM_ALIGN(8) vec3 k;
|
CGLM_ALIGN(8) vec3 k;
|
||||||
float a, c, s;
|
float a, c, s;
|
||||||
|
|
||||||
@@ -189,7 +189,7 @@ glm_quat(versor q, float angle, float x, float y, float z) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_copy(const versor q, versor dest) {
|
glm_quat_copy(versor q, versor dest) {
|
||||||
glm_vec4_copy(q, dest);
|
glm_vec4_copy(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ glm_quat_copy(const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_norm(const versor q) {
|
glm_quat_norm(versor q) {
|
||||||
return glm_vec4_norm(q);
|
return glm_vec4_norm(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,13 +212,13 @@ glm_quat_norm(const versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_normalize_to(const versor q, versor dest) {
|
glm_quat_normalize_to(versor q, versor dest) {
|
||||||
#if defined( __SSE2__ ) || defined( __SSE2__ )
|
#if defined( __SSE2__ ) || defined( __SSE2__ )
|
||||||
__m128 xdot, x0;
|
__m128 xdot, x0;
|
||||||
float dot;
|
float dot;
|
||||||
|
|
||||||
x0 = glmm_load(q);
|
x0 = glmm_load(q);
|
||||||
xdot = glmm_vdot(x0, x0);
|
xdot = glmm_dot(x0, x0);
|
||||||
dot = _mm_cvtss_f32(xdot);
|
dot = _mm_cvtss_f32(xdot);
|
||||||
|
|
||||||
if (dot <= 0.0f) {
|
if (dot <= 0.0f) {
|
||||||
@@ -260,7 +260,7 @@ glm_quat_normalize(versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_dot(const versor p, const versor q) {
|
glm_quat_dot(versor p, versor q) {
|
||||||
return glm_vec4_dot(p, q);
|
return glm_vec4_dot(p, q);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,7 +272,7 @@ glm_quat_dot(const versor p, const versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_conjugate(const versor q, versor dest) {
|
glm_quat_conjugate(versor q, versor dest) {
|
||||||
glm_vec4_negate_to(q, dest);
|
glm_vec4_negate_to(q, dest);
|
||||||
dest[3] = -dest[3];
|
dest[3] = -dest[3];
|
||||||
}
|
}
|
||||||
@@ -285,7 +285,7 @@ glm_quat_conjugate(const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_inv(const versor q, versor dest) {
|
glm_quat_inv(versor q, versor dest) {
|
||||||
CGLM_ALIGN(16) versor conj;
|
CGLM_ALIGN(16) versor conj;
|
||||||
glm_quat_conjugate(q, conj);
|
glm_quat_conjugate(q, conj);
|
||||||
glm_vec4_scale(conj, 1.0f / glm_vec4_norm2(q), dest);
|
glm_vec4_scale(conj, 1.0f / glm_vec4_norm2(q), dest);
|
||||||
@@ -300,7 +300,7 @@ glm_quat_inv(const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_add(const versor p, const versor q, versor dest) {
|
glm_quat_add(versor p, versor q, versor dest) {
|
||||||
glm_vec4_add(p, q, dest);
|
glm_vec4_add(p, q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ glm_quat_add(const versor p, const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_sub(const versor p, const versor q, versor dest) {
|
glm_quat_sub(versor p, versor q, versor dest) {
|
||||||
glm_vec4_sub(p, q, dest);
|
glm_vec4_sub(p, q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,7 +324,7 @@ glm_quat_sub(const versor p, const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_real(const versor q) {
|
glm_quat_real(versor q) {
|
||||||
return q[3];
|
return q[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,7 +336,7 @@ glm_quat_real(const versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_imag(const versor q, vec3 dest) {
|
glm_quat_imag(versor q, vec3 dest) {
|
||||||
dest[0] = q[0];
|
dest[0] = q[0];
|
||||||
dest[1] = q[1];
|
dest[1] = q[1];
|
||||||
dest[2] = q[2];
|
dest[2] = q[2];
|
||||||
@@ -349,7 +349,7 @@ glm_quat_imag(const versor q, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_imagn(const versor q, vec3 dest) {
|
glm_quat_imagn(versor q, vec3 dest) {
|
||||||
glm_normalize_to(q, dest);
|
glm_normalize_to(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,7 +360,7 @@ glm_quat_imagn(const versor q, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_imaglen(const versor q) {
|
glm_quat_imaglen(versor q) {
|
||||||
return glm_vec3_norm(q);
|
return glm_vec3_norm(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,7 +371,7 @@ glm_quat_imaglen(const versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_angle(const versor q) {
|
glm_quat_angle(versor q) {
|
||||||
/*
|
/*
|
||||||
sin(theta / 2) = length(x*x + y*y + z*z)
|
sin(theta / 2) = length(x*x + y*y + z*z)
|
||||||
cos(theta / 2) = w
|
cos(theta / 2) = w
|
||||||
@@ -388,7 +388,7 @@ glm_quat_angle(const versor q) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_axis(const versor q, versor dest) {
|
glm_quat_axis(versor q, versor dest) {
|
||||||
glm_quat_imagn(q, dest);
|
glm_quat_imagn(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -406,7 +406,7 @@ glm_quat_axis(const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mul(const versor p, const versor q, versor dest) {
|
glm_quat_mul(versor p, versor q, versor dest) {
|
||||||
/*
|
/*
|
||||||
+ (a1 b2 + b1 a2 + c1 d2 − d1 c2)i
|
+ (a1 b2 + b1 a2 + c1 d2 − d1 c2)i
|
||||||
+ (a1 c2 − b1 d2 + c1 a2 + d1 b2)j
|
+ (a1 c2 − b1 d2 + c1 a2 + d1 b2)j
|
||||||
@@ -431,7 +431,7 @@ glm_quat_mul(const versor p, const versor q, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mat4(const versor q, mat4 dest) {
|
glm_quat_mat4(versor q, mat4 dest) {
|
||||||
float w, x, y, z,
|
float w, x, y, z,
|
||||||
xx, yy, zz,
|
xx, yy, zz,
|
||||||
xy, yz, xz,
|
xy, yz, xz,
|
||||||
@@ -478,7 +478,7 @@ glm_quat_mat4(const versor q, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mat4t(const versor q, mat4 dest) {
|
glm_quat_mat4t(versor q, mat4 dest) {
|
||||||
float w, x, y, z,
|
float w, x, y, z,
|
||||||
xx, yy, zz,
|
xx, yy, zz,
|
||||||
xy, yz, xz,
|
xy, yz, xz,
|
||||||
@@ -525,7 +525,7 @@ glm_quat_mat4t(const versor q, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mat3(const versor q, mat3 dest) {
|
glm_quat_mat3(versor q, mat3 dest) {
|
||||||
float w, x, y, z,
|
float w, x, y, z,
|
||||||
xx, yy, zz,
|
xx, yy, zz,
|
||||||
xy, yz, xz,
|
xy, yz, xz,
|
||||||
@@ -564,7 +564,7 @@ glm_quat_mat3(const versor q, mat3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mat3t(const versor q, mat3 dest) {
|
glm_quat_mat3t(versor q, mat3 dest) {
|
||||||
float w, x, y, z,
|
float w, x, y, z,
|
||||||
xx, yy, zz,
|
xx, yy, zz,
|
||||||
xy, yz, xz,
|
xy, yz, xz,
|
||||||
@@ -606,7 +606,7 @@ glm_quat_mat3t(const versor q, mat3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_lerp(const versor from, const versor to, float t, versor dest) {
|
glm_quat_lerp(versor from, versor to, float t, versor dest) {
|
||||||
glm_vec4_lerp(from, to, t, dest);
|
glm_vec4_lerp(from, to, t, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -621,7 +621,7 @@ glm_quat_lerp(const versor from, const versor to, float t, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_slerp(const versor from, const versor to, float t, versor dest) {
|
glm_quat_slerp(versor from, versor to, float t, versor dest) {
|
||||||
CGLM_ALIGN(16) vec4 q1, q2;
|
CGLM_ALIGN(16) vec4 q1, q2;
|
||||||
float cosTheta, sinTheta, angle;
|
float cosTheta, sinTheta, angle;
|
||||||
|
|
||||||
@@ -664,7 +664,7 @@ glm_quat_slerp(const versor from, const versor to, float t, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_look(const vec3 eye, const versor ori, mat4 dest) {
|
glm_quat_look(vec3 eye, versor ori, mat4 dest) {
|
||||||
/* orientation */
|
/* orientation */
|
||||||
glm_quat_mat4t(ori, dest);
|
glm_quat_mat4t(ori, dest);
|
||||||
|
|
||||||
@@ -683,7 +683,7 @@ glm_quat_look(const vec3 eye, const versor ori, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) {
|
glm_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) {
|
||||||
CGLM_ALIGN(8) vec3 axis;
|
CGLM_ALIGN(8) vec3 axis;
|
||||||
float dot, angle;
|
float dot, angle;
|
||||||
|
|
||||||
@@ -717,11 +717,7 @@ glm_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_forp(const vec3 from,
|
glm_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) {
|
||||||
const vec3 to,
|
|
||||||
const vec3 fwd,
|
|
||||||
const vec3 up,
|
|
||||||
versor dest) {
|
|
||||||
CGLM_ALIGN(8) vec3 dir;
|
CGLM_ALIGN(8) vec3 dir;
|
||||||
glm_vec3_sub(to, from, dir);
|
glm_vec3_sub(to, from, dir);
|
||||||
glm_quat_for(dir, fwd, up, dest);
|
glm_quat_for(dir, fwd, up, dest);
|
||||||
@@ -736,7 +732,7 @@ glm_quat_forp(const vec3 from,
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_rotatev(const versor q, const vec3 v, vec3 dest) {
|
glm_quat_rotatev(versor q, vec3 v, vec3 dest) {
|
||||||
CGLM_ALIGN(16) versor p;
|
CGLM_ALIGN(16) versor p;
|
||||||
CGLM_ALIGN(8) vec3 u, v1, v2;
|
CGLM_ALIGN(8) vec3 u, v1, v2;
|
||||||
float s;
|
float s;
|
||||||
@@ -764,7 +760,7 @@ glm_quat_rotatev(const versor q, const vec3 v, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_rotate(const mat4 m, const versor q, mat4 dest) {
|
glm_quat_rotate(mat4 m, versor q, mat4 dest) {
|
||||||
CGLM_ALIGN_MAT mat4 rot;
|
CGLM_ALIGN_MAT mat4 rot;
|
||||||
glm_quat_mat4(q, rot);
|
glm_quat_mat4(q, rot);
|
||||||
glm_mul_rot(m, rot, dest);
|
glm_mul_rot(m, rot, dest);
|
||||||
@@ -779,7 +775,7 @@ glm_quat_rotate(const mat4 m, const versor q, mat4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_rotate_at(mat4 m, const versor q, const vec3 pivot) {
|
glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) {
|
||||||
CGLM_ALIGN(8) vec3 pivotInv;
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
glm_vec3_negate_to(pivot, pivotInv);
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
@@ -803,7 +799,7 @@ glm_quat_rotate_at(mat4 m, const versor q, const vec3 pivot) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot) {
|
glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) {
|
||||||
CGLM_ALIGN(8) vec3 pivotInv;
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
glm_vec3_negate_to(pivot, pivotInv);
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
|
|||||||
@@ -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 cglm_simd_arm_h
|
|
||||||
#define cglm_simd_arm_h
|
|
||||||
#include "intrin.h"
|
|
||||||
#ifdef CGLM_SIMD_ARM
|
|
||||||
|
|
||||||
#define glmm_load(p) vld1q_f32(p)
|
|
||||||
#define glmm_store(p, a) vst1q_f32(p, a)
|
|
||||||
|
|
||||||
static inline
|
|
||||||
float
|
|
||||||
glmm_hadd(float32x4_t v) {
|
|
||||||
#if defined(__aarch64__)
|
|
||||||
return vaddvq_f32(v);
|
|
||||||
#else
|
|
||||||
v = vaddq_f32(v, vrev64q_f32(v));
|
|
||||||
v = vaddq_f32(v, vcombine_f32(vget_high_f32(v), vget_low_f32(v)));
|
|
||||||
return vgetq_lane_f32(v, 0);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
float
|
|
||||||
glmm_dot(float32x4_t a, float32x4_t b) {
|
|
||||||
return glmm_hadd(vmulq_f32(a, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
float
|
|
||||||
glmm_norm(float32x4_t a) {
|
|
||||||
return sqrtf(glmm_dot(a, a));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif /* cglm_simd_arm_h */
|
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mul_avx(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
/* D = R * L (Column-Major) */
|
/* D = R * L (Column-Major) */
|
||||||
|
|
||||||
__m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9;
|
__m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9;
|
||||||
|
|||||||
@@ -16,29 +16,45 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mat4_scale_avx(mat4 m, float s) {
|
||||||
|
__m256 y0;
|
||||||
|
y0 = _mm256_set1_ps(s);
|
||||||
|
|
||||||
|
glmm_store256(m[0], _mm256_mul_ps(y0, glmm_load256(m[0])));
|
||||||
|
glmm_store256(m[2], _mm256_mul_ps(y0, glmm_load256(m[2])));
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_mat4_mul_avx(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
/* D = R * L (Column-Major) */
|
/* D = R * L (Column-Major) */
|
||||||
|
|
||||||
__m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9;
|
__m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9;
|
||||||
|
__m256i yi0, yi1, yi2, yi3;
|
||||||
|
|
||||||
y0 = glmm_load256(m2[0]); /* h g f e d c b a */
|
y0 = glmm_load256(m2[0]); /* h g f e d c b a */
|
||||||
y1 = glmm_load256(m2[2]); /* p o n m l k j i */
|
y1 = glmm_load256(m2[2]); /* p o n m l k j i */
|
||||||
|
|
||||||
y2 = glmm_load256(m1[0]); /* h g f e d c b a */
|
y2 = glmm_load256(m1[0]); /* h g f e d c b a */
|
||||||
y3 = glmm_load256(m1[2]); /* p o n m l k j i */
|
y3 = glmm_load256(m1[2]); /* p o n m l k j i */
|
||||||
|
|
||||||
/* 0x03: 0b00000011 */
|
/* 0x03: 0b00000011 */
|
||||||
y4 = _mm256_permute2f128_ps(y2, y2, 0x03); /* d c b a h g f e */
|
y4 = _mm256_permute2f128_ps(y2, y2, 0x03); /* d c b a h g f e */
|
||||||
y5 = _mm256_permute2f128_ps(y3, y3, 0x03); /* l k j i p o n m */
|
y5 = _mm256_permute2f128_ps(y3, y3, 0x03); /* l k j i p o n m */
|
||||||
|
|
||||||
|
yi0 = _mm256_set_epi32(1, 1, 1, 1, 0, 0, 0, 0);
|
||||||
|
yi1 = _mm256_set_epi32(3, 3, 3, 3, 2, 2, 2, 2);
|
||||||
|
yi2 = _mm256_set_epi32(0, 0, 0, 0, 1, 1, 1, 1);
|
||||||
|
yi3 = _mm256_set_epi32(2, 2, 2, 2, 3, 3, 3, 3);
|
||||||
|
|
||||||
/* f f f f a a a a */
|
/* f f f f a a a a */
|
||||||
/* h h h h c c c c */
|
/* h h h h c c c c */
|
||||||
/* e e e e b b b b */
|
/* e e e e b b b b */
|
||||||
/* g g g g d d d d */
|
/* g g g g d d d d */
|
||||||
y6 = _mm256_permutevar_ps(y0, _mm256_set_epi32(1, 1, 1, 1, 0, 0, 0, 0));
|
y6 = _mm256_permutevar_ps(y0, yi0);
|
||||||
y7 = _mm256_permutevar_ps(y0, _mm256_set_epi32(3, 3, 3, 3, 2, 2, 2, 2));
|
y7 = _mm256_permutevar_ps(y0, yi1);
|
||||||
y8 = _mm256_permutevar_ps(y0, _mm256_set_epi32(0, 0, 0, 0, 1, 1, 1, 1));
|
y8 = _mm256_permutevar_ps(y0, yi2);
|
||||||
y9 = _mm256_permutevar_ps(y0, _mm256_set_epi32(2, 2, 2, 2, 3, 3, 3, 3));
|
y9 = _mm256_permutevar_ps(y0, yi3);
|
||||||
|
|
||||||
glmm_store256(dest[0],
|
glmm_store256(dest[0],
|
||||||
_mm256_add_ps(_mm256_add_ps(_mm256_mul_ps(y2, y6),
|
_mm256_add_ps(_mm256_add_ps(_mm256_mul_ps(y2, y6),
|
||||||
@@ -50,10 +66,10 @@ glm_mat4_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) {
|
|||||||
/* p p p p k k k k */
|
/* p p p p k k k k */
|
||||||
/* m m m m j j j j */
|
/* m m m m j j j j */
|
||||||
/* o o o o l l l l */
|
/* o o o o l l l l */
|
||||||
y6 = _mm256_permutevar_ps(y1, _mm256_set_epi32(1, 1, 1, 1, 0, 0, 0, 0));
|
y6 = _mm256_permutevar_ps(y1, yi0);
|
||||||
y7 = _mm256_permutevar_ps(y1, _mm256_set_epi32(3, 3, 3, 3, 2, 2, 2, 2));
|
y7 = _mm256_permutevar_ps(y1, yi1);
|
||||||
y8 = _mm256_permutevar_ps(y1, _mm256_set_epi32(0, 0, 0, 0, 1, 1, 1, 1));
|
y8 = _mm256_permutevar_ps(y1, yi2);
|
||||||
y9 = _mm256_permutevar_ps(y1, _mm256_set_epi32(2, 2, 2, 2, 3, 3, 3, 3));
|
y9 = _mm256_permutevar_ps(y1, yi3);
|
||||||
|
|
||||||
glmm_store256(dest[2],
|
glmm_store256(dest[2],
|
||||||
_mm256_add_ps(_mm256_add_ps(_mm256_mul_ps(y2, y6),
|
_mm256_add_ps(_mm256_add_ps(_mm256_mul_ps(y2, y6),
|
||||||
@@ -62,5 +78,365 @@ glm_mat4_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) {
|
|||||||
_mm256_mul_ps(y5, y9))));
|
_mm256_mul_ps(y5, y9))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_mat4_inv_avx(mat4 mat, mat4 dest) {
|
||||||
|
__m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13;
|
||||||
|
__m256 yt0, yt1, yt2;
|
||||||
|
__m256 t0, t1, t2;
|
||||||
|
__m256 r1, r2;
|
||||||
|
__m256 flpsign;
|
||||||
|
__m256i yi1, yi2, yi3;
|
||||||
|
|
||||||
|
y0 = glmm_load256(mat[0]); /* h g f e d c b a */
|
||||||
|
y1 = glmm_load256(mat[2]); /* p o n m l k j i */
|
||||||
|
|
||||||
|
y2 = _mm256_permute2f128_ps(y1, y1, 0x00); /* l k j i l k j i */
|
||||||
|
y3 = _mm256_permute2f128_ps(y1, y1, 0x11); /* p o n m p o n m */
|
||||||
|
y4 = _mm256_permute2f128_ps(y0, y0, 0x03); /* d c b a h g f e */
|
||||||
|
y13 = _mm256_permute2f128_ps(y4, y4, 0x00); /* h g f e h g f e */
|
||||||
|
|
||||||
|
yi1 = _mm256_set_epi32(0, 0, 0, 0, 0, 1, 1, 2);
|
||||||
|
yi2 = _mm256_set_epi32(1, 1, 1, 2, 3, 2, 3, 3);
|
||||||
|
flpsign = _mm256_set_ps(0.f, -0.f, 0.f, -0.f, -0.f, 0.f, -0.f, 0.f);
|
||||||
|
|
||||||
|
/* i i i i i j j k */
|
||||||
|
/* n n n o p o p p */
|
||||||
|
/* m m m m m n n o */
|
||||||
|
/* j j j k l k l l */
|
||||||
|
/* e e e e e f f g */
|
||||||
|
/* f f f g h g h h */
|
||||||
|
y5 = _mm256_permutevar_ps(y2, yi1);
|
||||||
|
y6 = _mm256_permutevar_ps(y3, yi2);
|
||||||
|
y7 = _mm256_permutevar_ps(y3, yi1);
|
||||||
|
y8 = _mm256_permutevar_ps(y2, yi2);
|
||||||
|
y2 = _mm256_permutevar_ps(y13, yi1);
|
||||||
|
y3 = _mm256_permutevar_ps(y13, yi2);
|
||||||
|
|
||||||
|
yi1 = _mm256_set_epi32(2, 1, 0, 0, 2, 1, 0, 0);
|
||||||
|
yi2 = _mm256_set_epi32(2, 1, 1, 0, 2, 1, 1, 0);
|
||||||
|
yi3 = _mm256_set_epi32(3, 3, 2, 0, 3, 3, 2, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
t0[0] = k * p - o * l; t1[0] = g * p - o * h; t2[0] = g * l - k * h;
|
||||||
|
t0[1] = j * p - n * l; t1[1] = f * p - n * h; t2[1] = f * l - j * h;
|
||||||
|
t0[2] = j * o - n * k; t1[2] = f * o - n * g; t2[2] = f * k - j * g;
|
||||||
|
t0[3] = i * p - m * l; t1[3] = e * p - m * h; t2[3] = e * l - i * h;
|
||||||
|
t0[4] = i * o - m * k; t1[4] = e * o - m * g; t2[4] = e * k - i * g;
|
||||||
|
t0[5] = i * n - m * j; t1[5] = e * n - m * f; t2[5] = e * j - i * f;
|
||||||
|
*/
|
||||||
|
yt0 = _mm256_sub_ps(_mm256_mul_ps(y5, y6), _mm256_mul_ps(y7, y8));
|
||||||
|
yt1 = _mm256_sub_ps(_mm256_mul_ps(y2, y6), _mm256_mul_ps(y7, y3));
|
||||||
|
yt2 = _mm256_sub_ps(_mm256_mul_ps(y2, y8), _mm256_mul_ps(y5, y3));
|
||||||
|
|
||||||
|
/* t3 t2 t1 t0 t3 t2 t1 t0 */
|
||||||
|
/* t5 t5 t5 t4 t5 t5 t5 t4 */
|
||||||
|
y9 = _mm256_permute2f128_ps(yt0, yt0, 0x00);
|
||||||
|
y10 = _mm256_permute2f128_ps(yt0, yt0, 0x11);
|
||||||
|
//
|
||||||
|
/* t2 t1 t0 t0 t2 t1 t0 t0 */
|
||||||
|
t0 = _mm256_permutevar_ps(y9, yi1);
|
||||||
|
|
||||||
|
/* t4 t3 t3 t1 t4 t3 t3 t1 */
|
||||||
|
y11 = _mm256_shuffle_ps(y9, y10, 0x4D);
|
||||||
|
y12 = _mm256_permutevar_ps(y11, yi2);
|
||||||
|
t1 = _mm256_permute2f128_ps(y12, y9, 0x00);
|
||||||
|
|
||||||
|
/* t5 t5 t4 t2 t5 t5 t4 t2 */
|
||||||
|
y11 = _mm256_shuffle_ps(y9, y10, 0x4A);
|
||||||
|
y12 = _mm256_permutevar_ps(y11, yi3);
|
||||||
|
t2 = _mm256_permute2f128_ps(y12, y12, 0x00);
|
||||||
|
|
||||||
|
/* a a a b e e e f */
|
||||||
|
/* b b c c f f g g */
|
||||||
|
/* c d d d g h h h */
|
||||||
|
y9 = _mm256_permute_ps(y4, 0x01);
|
||||||
|
y10 = _mm256_permute_ps(y4, 0x5A);
|
||||||
|
y11 = _mm256_permute_ps(y4, 0xBF);
|
||||||
|
|
||||||
|
/*
|
||||||
|
dest[0][0] = f * t[0] - g * t[1] + h * t[2];
|
||||||
|
dest[1][0] =-(e * t[0] - g * t[3] + h * t[4]);
|
||||||
|
dest[2][0] = e * t[1] - f * t[3] + h * t[5];
|
||||||
|
dest[3][0] =-(e * t[2] - f * t[4] + g * t[5]);
|
||||||
|
|
||||||
|
dest[0][1] =-(b * t[0] - c * t[1] + d * t[2]);
|
||||||
|
dest[1][1] = a * t[0] - c * t[3] + d * t[4];
|
||||||
|
dest[2][1] =-(a * t[1] - b * t[3] + d * t[5]);
|
||||||
|
dest[3][1] = a * t[2] - b * t[4] + c * t[5];
|
||||||
|
*/
|
||||||
|
r1 = _mm256_xor_ps(_mm256_add_ps(_mm256_sub_ps(_mm256_mul_ps(y9, t0),
|
||||||
|
_mm256_mul_ps(y10, t1)),
|
||||||
|
_mm256_mul_ps(y11, t2)),
|
||||||
|
flpsign);
|
||||||
|
|
||||||
|
/* d c b a d c b a */
|
||||||
|
y2 = _mm256_permute2f128_ps(y0, y0, 0x0);
|
||||||
|
|
||||||
|
/* a a a b a a a b */
|
||||||
|
/* b b c c b b c c */
|
||||||
|
/* c d d d c d d d */
|
||||||
|
y3 = _mm256_permutevar_ps(y2, _mm256_set_epi32(0, 0, 0, 1, 0, 0, 0, 1));
|
||||||
|
y4 = _mm256_permutevar_ps(y2, _mm256_set_epi32(1, 1, 2, 2, 1, 1, 2, 2));
|
||||||
|
y5 = _mm256_permutevar_ps(y2, _mm256_set_epi32(2, 3, 3, 3, 2, 3, 3, 3));
|
||||||
|
|
||||||
|
/* t2[3] t2[2] t2[1] t2[0] t1[3] t1[2] t1[1] t1[0] */
|
||||||
|
/* t2[5] t2[5] t2[5] t2[4] t1[5] t1[5] t1[5] t1[4] */
|
||||||
|
y6 = _mm256_permute2f128_ps(yt1, yt2, 0x20);
|
||||||
|
y7 = _mm256_permute2f128_ps(yt1, yt2, 0x31);
|
||||||
|
|
||||||
|
/* t2[2] t2[1] t2[0] t2[0] t1[2] t1[1] t1[0] t1[0] */
|
||||||
|
t0 = _mm256_permutevar_ps(y6, yi1);
|
||||||
|
|
||||||
|
/* t1[4] t1[3] t1[3] t1[1] t1[4] t1[3] t1[3] t1[1] */
|
||||||
|
|
||||||
|
/* t1[4] t1[3] t1[3] t1[1] t1[4] t1[3] t1[3] t1[1] */
|
||||||
|
y11 = _mm256_shuffle_ps(y6, y7, 0x4D);
|
||||||
|
t1 = _mm256_permutevar_ps(y11, yi2);
|
||||||
|
|
||||||
|
|
||||||
|
/* t2[5] t2[5] t2[4] t2[2] t1[5] t1[5] t1[4] t1[2] */
|
||||||
|
y11 = _mm256_shuffle_ps(y6, y7, 0x4A);
|
||||||
|
t2 = _mm256_permutevar_ps(y11, yi3);
|
||||||
|
|
||||||
|
/*
|
||||||
|
dest[0][2] = b * t1[0] - c * t1[1] + d * t1[2];
|
||||||
|
dest[1][2] =-(a * t1[0] - c * t1[3] + d * t1[4]);
|
||||||
|
dest[2][2] = a * t1[1] - b * t1[3] + d * t1[5];
|
||||||
|
dest[3][2] =-(a * t1[2] - b * t1[4] + c * t1[5]);
|
||||||
|
|
||||||
|
dest[0][3] =-(b * t2[0] - c * t2[1] + d * t2[2]);
|
||||||
|
dest[1][3] = a * t2[0] - c * t2[3] + d * t2[4];
|
||||||
|
dest[2][3] =-(a * t2[1] - b * t2[3] + d * t2[5]);
|
||||||
|
dest[3][3] = a * t2[2] - b * t2[4] + c * t2[5];
|
||||||
|
*/
|
||||||
|
r2 = _mm256_xor_ps(_mm256_add_ps(_mm256_sub_ps(_mm256_mul_ps(y3, t0),
|
||||||
|
_mm256_mul_ps(y4, t1)),
|
||||||
|
_mm256_mul_ps(y5, t2)),
|
||||||
|
flpsign);
|
||||||
|
|
||||||
|
/* determinant */
|
||||||
|
|
||||||
|
y4 = _mm256_mul_ps(y0, r1);
|
||||||
|
y4 = _mm256_permute2f128_ps(y4, y4, 0x30);
|
||||||
|
y4 = _mm256_dp_ps(y0, r1, 0xff);
|
||||||
|
|
||||||
|
y5 = _mm256_div_ps(_mm256_set1_ps(1.0f), y4);
|
||||||
|
r1 = _mm256_mul_ps(r1, y5);
|
||||||
|
r2 = _mm256_mul_ps(r2, y5);
|
||||||
|
|
||||||
|
/* transpose */
|
||||||
|
|
||||||
|
/* d c b a h g f e */
|
||||||
|
/* l k j i p o n m */
|
||||||
|
y0 = _mm256_permute2f128_ps(r1, r1, 0x03);
|
||||||
|
y1 = _mm256_permute2f128_ps(r2, r2, 0x03);
|
||||||
|
|
||||||
|
/* b a f e f e b a */
|
||||||
|
/* j i n m n m j i */
|
||||||
|
/* i m a e m i e a */
|
||||||
|
/* j n b f n j f b */
|
||||||
|
/* n j f b m i e a */
|
||||||
|
y2 = _mm256_shuffle_ps(r1, y0, 0x44);
|
||||||
|
y3 = _mm256_shuffle_ps(r2, y1, 0x44);
|
||||||
|
y4 = _mm256_shuffle_ps(y2, y3, 0x88);
|
||||||
|
y5 = _mm256_shuffle_ps(y2, y3, 0xDD);
|
||||||
|
y6 = _mm256_permute2f128_ps(y4, y5, 0x20);
|
||||||
|
|
||||||
|
/* d c h g h g d c */
|
||||||
|
/* l k p o p o l k */
|
||||||
|
/* k o c g o k g c */
|
||||||
|
/* l p d h p l h d */
|
||||||
|
/* p l h d o k g c */
|
||||||
|
y2 = _mm256_shuffle_ps(r1, y0, 0xEE);
|
||||||
|
y3 = _mm256_shuffle_ps(r2, y1, 0xEE);
|
||||||
|
y4 = _mm256_shuffle_ps(y2, y3, 0x88);
|
||||||
|
y5 = _mm256_shuffle_ps(y2, y3, 0xDD);
|
||||||
|
y7 = _mm256_permute2f128_ps(y4, y5, 0x20);
|
||||||
|
|
||||||
|
glmm_store256(dest[0], y6);
|
||||||
|
glmm_store256(dest[2], y7);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_mat4_inv_fast_avx(mat4 mat, mat4 dest) {
|
||||||
|
__m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13;
|
||||||
|
__m256 yt0, yt1, yt2;
|
||||||
|
__m256 t0, t1, t2;
|
||||||
|
__m256 r1, r2;
|
||||||
|
__m256 flpsign;
|
||||||
|
__m256i yi1, yi2, yi3;
|
||||||
|
|
||||||
|
y0 = glmm_load256(mat[0]); /* h g f e d c b a */
|
||||||
|
y1 = glmm_load256(mat[2]); /* p o n m l k j i */
|
||||||
|
|
||||||
|
y2 = _mm256_permute2f128_ps(y1, y1, 0x00); /* l k j i l k j i */
|
||||||
|
y3 = _mm256_permute2f128_ps(y1, y1, 0x11); /* p o n m p o n m */
|
||||||
|
y4 = _mm256_permute2f128_ps(y0, y0, 0x03); /* d c b a h g f e */
|
||||||
|
y13 = _mm256_permute2f128_ps(y4, y4, 0x00); /* h g f e h g f e */
|
||||||
|
|
||||||
|
yi1 = _mm256_set_epi32(0, 0, 0, 0, 0, 1, 1, 2);
|
||||||
|
yi2 = _mm256_set_epi32(1, 1, 1, 2, 3, 2, 3, 3);
|
||||||
|
flpsign = _mm256_set_ps(0.f, -0.f, 0.f, -0.f, -0.f, 0.f, -0.f, 0.f);
|
||||||
|
|
||||||
|
/* i i i i i j j k */
|
||||||
|
/* n n n o p o p p */
|
||||||
|
/* m m m m m n n o */
|
||||||
|
/* j j j k l k l l */
|
||||||
|
/* e e e e e f f g */
|
||||||
|
/* f f f g h g h h */
|
||||||
|
y5 = _mm256_permutevar_ps(y2, yi1);
|
||||||
|
y6 = _mm256_permutevar_ps(y3, yi2);
|
||||||
|
y7 = _mm256_permutevar_ps(y3, yi1);
|
||||||
|
y8 = _mm256_permutevar_ps(y2, yi2);
|
||||||
|
y2 = _mm256_permutevar_ps(y13, yi1);
|
||||||
|
y3 = _mm256_permutevar_ps(y13, yi2);
|
||||||
|
|
||||||
|
yi1 = _mm256_set_epi32(2, 1, 0, 0, 2, 1, 0, 0);
|
||||||
|
yi2 = _mm256_set_epi32(2, 1, 1, 0, 2, 1, 1, 0);
|
||||||
|
yi3 = _mm256_set_epi32(3, 3, 2, 0, 3, 3, 2, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
t0[0] = k * p - o * l; t1[0] = g * p - o * h; t2[0] = g * l - k * h;
|
||||||
|
t0[1] = j * p - n * l; t1[1] = f * p - n * h; t2[1] = f * l - j * h;
|
||||||
|
t0[2] = j * o - n * k; t1[2] = f * o - n * g; t2[2] = f * k - j * g;
|
||||||
|
t0[3] = i * p - m * l; t1[3] = e * p - m * h; t2[3] = e * l - i * h;
|
||||||
|
t0[4] = i * o - m * k; t1[4] = e * o - m * g; t2[4] = e * k - i * g;
|
||||||
|
t0[5] = i * n - m * j; t1[5] = e * n - m * f; t2[5] = e * j - i * f;
|
||||||
|
*/
|
||||||
|
yt0 = _mm256_sub_ps(_mm256_mul_ps(y5, y6), _mm256_mul_ps(y7, y8));
|
||||||
|
yt1 = _mm256_sub_ps(_mm256_mul_ps(y2, y6), _mm256_mul_ps(y7, y3));
|
||||||
|
yt2 = _mm256_sub_ps(_mm256_mul_ps(y2, y8), _mm256_mul_ps(y5, y3));
|
||||||
|
|
||||||
|
/* t3 t2 t1 t0 t3 t2 t1 t0 */
|
||||||
|
/* t5 t5 t5 t4 t5 t5 t5 t4 */
|
||||||
|
y9 = _mm256_permute2f128_ps(yt0, yt0, 0x00);
|
||||||
|
y10 = _mm256_permute2f128_ps(yt0, yt0, 0x11);
|
||||||
|
|
||||||
|
/* t2 t1 t0 t0 t2 t1 t0 t0 */
|
||||||
|
t0 = _mm256_permutevar_ps(y9, yi1);
|
||||||
|
|
||||||
|
/* t4 t3 t3 t1 t4 t3 t3 t1 */
|
||||||
|
y11 = _mm256_shuffle_ps(y9, y10, 0x4D);
|
||||||
|
y12 = _mm256_permutevar_ps(y11, yi2);
|
||||||
|
t1 = _mm256_permute2f128_ps(y12, y9, 0x00);
|
||||||
|
|
||||||
|
/* t5 t5 t4 t2 t5 t5 t4 t2 */
|
||||||
|
y11 = _mm256_shuffle_ps(y9, y10, 0x4A);
|
||||||
|
y12 = _mm256_permutevar_ps(y11, yi3);
|
||||||
|
t2 = _mm256_permute2f128_ps(y12, y12, 0x00);
|
||||||
|
|
||||||
|
/* a a a b e e e f */
|
||||||
|
/* b b c c f f g g */
|
||||||
|
/* c d d d g h h h */
|
||||||
|
y9 = _mm256_permute_ps(y4, 0x01);
|
||||||
|
y10 = _mm256_permute_ps(y4, 0x5A);
|
||||||
|
y11 = _mm256_permute_ps(y4, 0xBF);
|
||||||
|
|
||||||
|
/*
|
||||||
|
dest[0][0] = f * t[0] - g * t[1] + h * t[2];
|
||||||
|
dest[1][0] =-(e * t[0] - g * t[3] + h * t[4]);
|
||||||
|
dest[2][0] = e * t[1] - f * t[3] + h * t[5];
|
||||||
|
dest[3][0] =-(e * t[2] - f * t[4] + g * t[5]);
|
||||||
|
|
||||||
|
dest[0][1] =-(b * t[0] - c * t[1] + d * t[2]);
|
||||||
|
dest[1][1] = a * t[0] - c * t[3] + d * t[4];
|
||||||
|
dest[2][1] =-(a * t[1] - b * t[3] + d * t[5]);
|
||||||
|
dest[3][1] = a * t[2] - b * t[4] + c * t[5];
|
||||||
|
*/
|
||||||
|
r1 = _mm256_xor_ps(_mm256_add_ps(_mm256_sub_ps(_mm256_mul_ps(y9, t0),
|
||||||
|
_mm256_mul_ps(y10, t1)),
|
||||||
|
_mm256_mul_ps(y11, t2)),
|
||||||
|
flpsign);
|
||||||
|
|
||||||
|
/* d c b a d c b a */
|
||||||
|
y2 = _mm256_permute2f128_ps(y0, y0, 0x0);
|
||||||
|
|
||||||
|
/* a a a b a a a b */
|
||||||
|
/* b b c c b b c c */
|
||||||
|
/* c d d d c d d d */
|
||||||
|
y3 = _mm256_permutevar_ps(y2, _mm256_set_epi32(0, 0, 0, 1, 0, 0, 0, 1));
|
||||||
|
y4 = _mm256_permutevar_ps(y2, _mm256_set_epi32(1, 1, 2, 2, 1, 1, 2, 2));
|
||||||
|
y5 = _mm256_permutevar_ps(y2, _mm256_set_epi32(2, 3, 3, 3, 2, 3, 3, 3));
|
||||||
|
|
||||||
|
/* t2[3] t2[2] t2[1] t2[0] t1[3] t1[2] t1[1] t1[0] */
|
||||||
|
/* t2[5] t2[5] t2[5] t2[4] t1[5] t1[5] t1[5] t1[4] */
|
||||||
|
y6 = _mm256_permute2f128_ps(yt1, yt2, 0x20);
|
||||||
|
y7 = _mm256_permute2f128_ps(yt1, yt2, 0x31);
|
||||||
|
|
||||||
|
/* t2[2] t2[1] t2[0] t2[0] t1[2] t1[1] t1[0] t1[0] */
|
||||||
|
t0 = _mm256_permutevar_ps(y6, yi1);
|
||||||
|
|
||||||
|
/* t1[4] t1[3] t1[3] t1[1] t1[4] t1[3] t1[3] t1[1] */
|
||||||
|
|
||||||
|
/* t1[4] t1[3] t1[3] t1[1] t1[4] t1[3] t1[3] t1[1] */
|
||||||
|
y11 = _mm256_shuffle_ps(y6, y7, 0x4D);
|
||||||
|
t1 = _mm256_permutevar_ps(y11, yi2);
|
||||||
|
|
||||||
|
|
||||||
|
/* t2[5] t2[5] t2[4] t2[2] t1[5] t1[5] t1[4] t1[2] */
|
||||||
|
y11 = _mm256_shuffle_ps(y6, y7, 0x4A);
|
||||||
|
t2 = _mm256_permutevar_ps(y11, yi3);
|
||||||
|
|
||||||
|
/*
|
||||||
|
dest[0][2] = b * t1[0] - c * t1[1] + d * t1[2];
|
||||||
|
dest[1][2] =-(a * t1[0] - c * t1[3] + d * t1[4]);
|
||||||
|
dest[2][2] = a * t1[1] - b * t1[3] + d * t1[5];
|
||||||
|
dest[3][2] =-(a * t1[2] - b * t1[4] + c * t1[5]);
|
||||||
|
|
||||||
|
dest[0][3] =-(b * t2[0] - c * t2[1] + d * t2[2]);
|
||||||
|
dest[1][3] = a * t2[0] - c * t2[3] + d * t2[4];
|
||||||
|
dest[2][3] =-(a * t2[1] - b * t2[3] + d * t2[5]);
|
||||||
|
dest[3][3] = a * t2[2] - b * t2[4] + c * t2[5];
|
||||||
|
*/
|
||||||
|
r2 = _mm256_xor_ps(_mm256_add_ps(_mm256_sub_ps(_mm256_mul_ps(y3, t0),
|
||||||
|
_mm256_mul_ps(y4, t1)),
|
||||||
|
_mm256_mul_ps(y5, t2)),
|
||||||
|
flpsign);
|
||||||
|
|
||||||
|
/* determinant */
|
||||||
|
|
||||||
|
y4 = _mm256_mul_ps(y0, r1);
|
||||||
|
y4 = _mm256_permute2f128_ps(y4, y4, 0x30);
|
||||||
|
y4 = _mm256_dp_ps(y0, r1, 0xff);
|
||||||
|
|
||||||
|
y5 = _mm256_rcp_ps(y4);
|
||||||
|
r1 = _mm256_mul_ps(r1, y5);
|
||||||
|
r2 = _mm256_mul_ps(r2, y5);
|
||||||
|
|
||||||
|
/* transpose */
|
||||||
|
|
||||||
|
/* d c b a h g f e */
|
||||||
|
/* l k j i p o n m */
|
||||||
|
y0 = _mm256_permute2f128_ps(r1, r1, 0x03);
|
||||||
|
y1 = _mm256_permute2f128_ps(r2, r2, 0x03);
|
||||||
|
|
||||||
|
/* b a f e f e b a */
|
||||||
|
/* j i n m n m j i */
|
||||||
|
/* i m a e m i e a */
|
||||||
|
/* j n b f n j f b */
|
||||||
|
/* n j f b m i e a */
|
||||||
|
y2 = _mm256_shuffle_ps(r1, y0, 0x44);
|
||||||
|
y3 = _mm256_shuffle_ps(r2, y1, 0x44);
|
||||||
|
y4 = _mm256_shuffle_ps(y2, y3, 0x88);
|
||||||
|
y5 = _mm256_shuffle_ps(y2, y3, 0xDD);
|
||||||
|
y6 = _mm256_permute2f128_ps(y4, y5, 0x20);
|
||||||
|
|
||||||
|
/* d c h g h g d c */
|
||||||
|
/* l k p o p o l k */
|
||||||
|
/* k o c g o k g c */
|
||||||
|
/* l p d h p l h d */
|
||||||
|
/* p l h d o k g c */
|
||||||
|
y2 = _mm256_shuffle_ps(r1, y0, 0xEE);
|
||||||
|
y3 = _mm256_shuffle_ps(r2, y1, 0xEE);
|
||||||
|
y4 = _mm256_shuffle_ps(y2, y3, 0x88);
|
||||||
|
y5 = _mm256_shuffle_ps(y2, y3, 0xDD);
|
||||||
|
y7 = _mm256_permute2f128_ps(y4, y5, 0x20);
|
||||||
|
|
||||||
|
glmm_store256(dest[0], y6);
|
||||||
|
glmm_store256(dest[2], y7);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* cglm_mat_simd_avx_h */
|
#endif /* cglm_mat_simd_avx_h */
|
||||||
|
|||||||
@@ -27,64 +27,90 @@
|
|||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
# include <xmmintrin.h>
|
# include <xmmintrin.h>
|
||||||
# include <emmintrin.h>
|
# include <emmintrin.h>
|
||||||
|
|
||||||
|
/* OPTIONAL: You may save some instructions but latency (not sure) */
|
||||||
|
#ifdef CGLM_USE_INT_DOMAIN
|
||||||
|
# define glmm_shuff1(xmm, z, y, x, w) \
|
||||||
|
_mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(xmm), \
|
||||||
|
_MM_SHUFFLE(z, y, x, w)))
|
||||||
|
#else
|
||||||
|
# define glmm_shuff1(xmm, z, y, x, w) \
|
||||||
|
_mm_shuffle_ps(xmm, xmm, _MM_SHUFFLE(z, y, x, w))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define glmm_shuff1x(xmm, x) glmm_shuff1(xmm, x, x, x, x)
|
||||||
|
#define glmm_shuff2(a, b, z0, y0, x0, w0, z1, y1, x1, w1) \
|
||||||
|
glmm_shuff1(_mm_shuffle_ps(a, b, _MM_SHUFFLE(z0, y0, x0, w0)), \
|
||||||
|
z1, y1, x1, w1)
|
||||||
|
|
||||||
|
static inline
|
||||||
|
__m128
|
||||||
|
glmm_dot(__m128 a, __m128 b) {
|
||||||
|
__m128 x0;
|
||||||
|
x0 = _mm_mul_ps(a, b);
|
||||||
|
x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2));
|
||||||
|
return _mm_add_ps(x0, glmm_shuff1(x0, 0, 1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
__m128
|
||||||
|
glmm_norm(__m128 a) {
|
||||||
|
return _mm_sqrt_ps(glmm_dot(a, a));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
__m128
|
||||||
|
glmm_load3(float v[3]) {
|
||||||
|
__m128i xy;
|
||||||
|
__m128 z;
|
||||||
|
|
||||||
|
xy = _mm_loadl_epi64((const __m128i *)v);
|
||||||
|
z = _mm_load_ss(&v[2]);
|
||||||
|
|
||||||
|
return _mm_movelh_ps(_mm_castsi128_ps(xy), z);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void
|
||||||
|
glmm_store3(__m128 vx, float v[3]) {
|
||||||
|
_mm_storel_pi((__m64 *)&v[0], vx);
|
||||||
|
_mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CGLM_ALL_UNALIGNED
|
||||||
|
# define glmm_load(p) _mm_loadu_ps(p)
|
||||||
|
# define glmm_store(p, a) _mm_storeu_ps(p, a)
|
||||||
|
#else
|
||||||
|
# define glmm_load(p) _mm_load_ps(p)
|
||||||
|
# define glmm_store(p, a) _mm_store_ps(p, a)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* x86, x64 */
|
||||||
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
# define CGLM_SSE_FP 1
|
# define CGLM_SSE_FP 1
|
||||||
# ifndef CGLM_SIMD_x86
|
|
||||||
# define CGLM_SIMD_x86
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__SSE3__)
|
|
||||||
# include <x86intrin.h>
|
|
||||||
# ifndef CGLM_SIMD_x86
|
|
||||||
# define CGLM_SIMD_x86
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__SSE4_1__)
|
|
||||||
# include <smmintrin.h>
|
|
||||||
# ifndef CGLM_SIMD_x86
|
|
||||||
# define CGLM_SIMD_x86
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__SSE4_2__)
|
|
||||||
# include <nmmintrin.h>
|
|
||||||
# ifndef CGLM_SIMD_x86
|
|
||||||
# define CGLM_SIMD_x86
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __AVX__
|
#ifdef __AVX__
|
||||||
# include <immintrin.h>
|
|
||||||
# define CGLM_AVX_FP 1
|
# define CGLM_AVX_FP 1
|
||||||
# ifndef CGLM_SIMD_x86
|
|
||||||
# define CGLM_SIMD_x86
|
#ifdef CGLM_ALL_UNALIGNED
|
||||||
# endif
|
# define glmm_load256(p) _mm256_loadu_ps(p)
|
||||||
|
# define glmm_store256(p, a) _mm256_storeu_ps(p, a)
|
||||||
|
#else
|
||||||
|
# define glmm_load256(p) _mm256_load_ps(p)
|
||||||
|
# define glmm_store256(p, a) _mm256_store_ps(p, a)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ARM Neon */
|
/* ARM Neon */
|
||||||
#if defined(__ARM_NEON)
|
#if defined(__ARM_NEON) && defined(__ARM_NEON_FP)
|
||||||
# include <arm_neon.h>
|
# include <arm_neon.h>
|
||||||
# if defined(__ARM_NEON_FP)
|
# define CGLM_NEON_FP 1
|
||||||
# define CGLM_NEON_FP 1
|
#else
|
||||||
# ifndef CGLM_SIMD_ARM
|
# undef CGLM_NEON_FP
|
||||||
# define CGLM_SIMD_ARM
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CGLM_SIMD_x86) || defined(CGLM_NEON_FP)
|
|
||||||
# ifndef CGLM_SIMD
|
|
||||||
# define CGLM_SIMD
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CGLM_SIMD_x86)
|
|
||||||
# include "x86.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CGLM_SIMD_ARM)
|
|
||||||
# include "arm.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* cglm_intrin_h */
|
#endif /* cglm_intrin_h */
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mul_neon(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mat4_mul_neon(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
/* D = R * L (Column-Major) */
|
/* D = R * L (Column-Major) */
|
||||||
float32x4_t l0, l1, l2, l3, r, d0, d1, d2, d3;
|
float32x4_t l0, l1, l2, l3, r, d0, d1, d2, d3;
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mul_sse2(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
/* D = R * L (Column-Major) */
|
/* D = R * L (Column-Major) */
|
||||||
__m128 l0, l1, l2, l3, r;
|
__m128 l0, l1, l2, l3, r;
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ glm_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mul_rot_sse2(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mul_rot_sse2(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
/* D = R * L (Column-Major) */
|
/* D = R * L (Column-Major) */
|
||||||
__m128 l0, l1, l2, l3, r;
|
__m128 l0, l1, l2, l3, r;
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_mul_sse2(const mat3 m1, const mat3 m2, mat3 dest) {
|
glm_mat3_mul_sse2(mat3 m1, mat3 m2, mat3 dest) {
|
||||||
__m128 l0, l1, l2;
|
__m128 l0, l1, l2;
|
||||||
__m128 r0, r1, r2;
|
__m128 r0, r1, r2;
|
||||||
__m128 x0, x1, x2;
|
__m128 x0, x1, x2;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ glm_mat4_scale_sse2(mat4 m, float s) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_transp_sse2(const mat4 m, mat4 dest) {
|
glm_mat4_transp_sse2(mat4 m, mat4 dest) {
|
||||||
__m128 r0, r1, r2, r3;
|
__m128 r0, r1, r2, r3;
|
||||||
|
|
||||||
r0 = glmm_load(m[0]);
|
r0 = glmm_load(m[0]);
|
||||||
@@ -46,7 +46,7 @@ glm_mat4_transp_sse2(const mat4 m, mat4 dest) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) {
|
glm_mat4_mul_sse2(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
/* D = R * L (Column-Major) */
|
/* D = R * L (Column-Major) */
|
||||||
|
|
||||||
__m128 l0, l1, l2, l3, r;
|
__m128 l0, l1, l2, l3, r;
|
||||||
@@ -85,7 +85,7 @@ glm_mat4_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_mulv_sse2(const mat4 m, const vec4 v, vec4 dest) {
|
glm_mat4_mulv_sse2(mat4 m, vec4 v, vec4 dest) {
|
||||||
__m128 x0, x1, x2;
|
__m128 x0, x1, x2;
|
||||||
|
|
||||||
x0 = glmm_load(v);
|
x0 = glmm_load(v);
|
||||||
@@ -100,7 +100,7 @@ glm_mat4_mulv_sse2(const mat4 m, const vec4 v, vec4 dest) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_mat4_det_sse2(const mat4 mat) {
|
glm_mat4_det_sse2(mat4 mat) {
|
||||||
__m128 r0, r1, r2, r3, x0, x1, x2;
|
__m128 r0, r1, r2, r3, x0, x1, x2;
|
||||||
|
|
||||||
/* 127 <- 0, [square] det(A) = det(At) */
|
/* 127 <- 0, [square] det(A) = det(At) */
|
||||||
@@ -155,7 +155,7 @@ glm_mat4_det_sse2(const mat4 mat) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_inv_fast_sse2(const mat4 mat, mat4 dest) {
|
glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) {
|
||||||
__m128 r0, r1, r2, r3,
|
__m128 r0, r1, r2, r3,
|
||||||
v0, v1, v2, v3,
|
v0, v1, v2, v3,
|
||||||
t0, t1, t2, t3, t4, t5,
|
t0, t1, t2, t3, t4, t5,
|
||||||
@@ -279,7 +279,7 @@ glm_mat4_inv_fast_sse2(const mat4 mat, mat4 dest) {
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_inv_sse2(const mat4 mat, mat4 dest) {
|
glm_mat4_inv_sse2(mat4 mat, mat4 dest) {
|
||||||
__m128 r0, r1, r2, r3,
|
__m128 r0, r1, r2, r3,
|
||||||
v0, v1, v2, v3,
|
v0, v1, v2, v3,
|
||||||
t0, t1, t2, t3, t4, t5,
|
t0, t1, t2, t3, t4, t5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mul_sse2(const versor p, const versor q, versor dest) {
|
glm_quat_mul_sse2(versor p, versor q, versor dest) {
|
||||||
/*
|
/*
|
||||||
+ (a1 b2 + b1 a2 + c1 d2 − d1 c2)i
|
+ (a1 b2 + b1 a2 + c1 d2 − d1 c2)i
|
||||||
+ (a1 c2 − b1 d2 + c1 a2 + d1 b2)j
|
+ (a1 c2 − b1 d2 + c1 a2 + d1 b2)j
|
||||||
|
|||||||
@@ -1,136 +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_simd_x86_h
|
|
||||||
#define cglm_simd_x86_h
|
|
||||||
#include "intrin.h"
|
|
||||||
#ifdef CGLM_SIMD_x86
|
|
||||||
|
|
||||||
#ifdef CGLM_ALL_UNALIGNED
|
|
||||||
# define glmm_load(p) _mm_loadu_ps(p)
|
|
||||||
# define glmm_store(p, a) _mm_storeu_ps(p, a)
|
|
||||||
#else
|
|
||||||
# define glmm_load(p) _mm_load_ps(p)
|
|
||||||
# define glmm_store(p, a) _mm_store_ps(p, a)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CGLM_USE_INT_DOMAIN
|
|
||||||
# define glmm_shuff1(xmm, z, y, x, w) \
|
|
||||||
_mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(xmm), \
|
|
||||||
_MM_SHUFFLE(z, y, x, w)))
|
|
||||||
#else
|
|
||||||
# define glmm_shuff1(xmm, z, y, x, w) \
|
|
||||||
_mm_shuffle_ps(xmm, xmm, _MM_SHUFFLE(z, y, x, w))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define glmm_shuff1x(xmm, x) glmm_shuff1(xmm, x, x, x, x)
|
|
||||||
#define glmm_shuff2(a, b, z0, y0, x0, w0, z1, y1, x1, w1) \
|
|
||||||
glmm_shuff1(_mm_shuffle_ps(a, b, _MM_SHUFFLE(z0, y0, x0, w0)), \
|
|
||||||
z1, y1, x1, w1)
|
|
||||||
|
|
||||||
#ifdef __AVX__
|
|
||||||
# ifdef CGLM_ALL_UNALIGNED
|
|
||||||
# define glmm_load256(p) _mm256_loadu_ps(p)
|
|
||||||
# define glmm_store256(p, a) _mm256_storeu_ps(p, a)
|
|
||||||
# else
|
|
||||||
# define glmm_load256(p) _mm256_load_ps(p)
|
|
||||||
# define glmm_store256(p, a) _mm256_store_ps(p, a)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline
|
|
||||||
__m128
|
|
||||||
glmm_vhadds(__m128 v) {
|
|
||||||
#if defined(__SSE3__)
|
|
||||||
__m128 shuf, sums;
|
|
||||||
shuf = _mm_movehdup_ps(v);
|
|
||||||
sums = _mm_add_ps(v, shuf);
|
|
||||||
shuf = _mm_movehl_ps(shuf, sums);
|
|
||||||
sums = _mm_add_ss(sums, shuf);
|
|
||||||
return sums;
|
|
||||||
#else
|
|
||||||
__m128 shuf, sums;
|
|
||||||
shuf = glmm_shuff1(v, 2, 3, 0, 1);
|
|
||||||
sums = _mm_add_ps(v, shuf);
|
|
||||||
shuf = _mm_movehl_ps(shuf, sums);
|
|
||||||
sums = _mm_add_ss(sums, shuf);
|
|
||||||
return sums;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
float
|
|
||||||
glmm_hadd(__m128 v) {
|
|
||||||
return _mm_cvtss_f32(glmm_vhadds(v));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
__m128
|
|
||||||
glmm_vdots(__m128 a, __m128 b) {
|
|
||||||
#if (defined(__SSE4_1__) || defined(__SSE4_2__)) && defined(CGLM_SSE4_DOT)
|
|
||||||
return _mm_dp_ps(a, b, 0xFF);
|
|
||||||
#elif defined(__SSE3__) && defined(CGLM_SSE3_DOT)
|
|
||||||
__m128 x0, x1;
|
|
||||||
x0 = _mm_mul_ps(a, b);
|
|
||||||
x1 = _mm_hadd_ps(x0, x0);
|
|
||||||
return _mm_hadd_ps(x1, x1);
|
|
||||||
#else
|
|
||||||
return glmm_vhadds(_mm_mul_ps(a, b));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
__m128
|
|
||||||
glmm_vdot(__m128 a, __m128 b) {
|
|
||||||
#if (defined(__SSE4_1__) || defined(__SSE4_2__)) && defined(CGLM_SSE4_DOT)
|
|
||||||
return _mm_dp_ps(a, b, 0xFF);
|
|
||||||
#elif defined(__SSE3__) && defined(CGLM_SSE3_DOT)
|
|
||||||
__m128 x0, x1;
|
|
||||||
x0 = _mm_mul_ps(a, b);
|
|
||||||
x1 = _mm_hadd_ps(x0, x0);
|
|
||||||
return _mm_hadd_ps(x1, x1);
|
|
||||||
#else
|
|
||||||
__m128 x0;
|
|
||||||
x0 = _mm_mul_ps(a, b);
|
|
||||||
x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2));
|
|
||||||
return _mm_add_ps(x0, glmm_shuff1(x0, 0, 1, 0, 1));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
float
|
|
||||||
glmm_dot(const __m128 a, const __m128 b) {
|
|
||||||
return _mm_cvtss_f32(glmm_vdots(a, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
float
|
|
||||||
glmm_norm(__m128 a) {
|
|
||||||
return _mm_cvtss_f32(_mm_sqrt_ss(glmm_vhadds(_mm_mul_ps(a, a))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
__m128
|
|
||||||
glmm_load3(const float v[3]) {
|
|
||||||
__m128i xy;
|
|
||||||
__m128 z;
|
|
||||||
|
|
||||||
xy = _mm_loadl_epi64((const __m128i *)v);
|
|
||||||
z = _mm_load_ss(&v[2]);
|
|
||||||
|
|
||||||
return _mm_movelh_ps(_mm_castsi128_ps(xy), z);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void
|
|
||||||
glmm_store3(__m128 vx, float v[3]) {
|
|
||||||
_mm_storel_pi((__m64 *)&v[0], vx);
|
|
||||||
_mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif /* cglm_simd_x86_h */
|
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_sphere_radii(const vec4 s) {
|
glm_sphere_radii(vec4 s) {
|
||||||
return s[3];
|
return s[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ glm_sphere_radii(const vec4 s) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_sphere_transform(const vec4 s, const mat4 m, vec4 dest) {
|
glm_sphere_transform(vec4 s, mat4 m, vec4 dest) {
|
||||||
glm_mat4_mulv3(m, s, 1.0f, dest);
|
glm_mat4_mulv3(m, s, 1.0f, dest);
|
||||||
dest[3] = s[3];
|
dest[3] = s[3];
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ glm_sphere_transform(const vec4 s, const mat4 m, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) {
|
glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) {
|
||||||
float dist, radii;
|
float dist, radii;
|
||||||
|
|
||||||
dist = glm_vec3_distance(s1, s2);
|
dist = glm_vec3_distance(s1, s2);
|
||||||
@@ -78,7 +78,7 @@ glm_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_sphere_sphere(const vec4 s1, const vec4 s2) {
|
glm_sphere_sphere(vec4 s1, vec4 s2) {
|
||||||
return glm_vec3_distance2(s1, s2) <= glm_pow2(s1[3] + s2[3]);
|
return glm_vec3_distance2(s1, s2) <= glm_pow2(s1[3] + s2[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ glm_sphere_sphere(const vec4 s1, const vec4 s2) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_sphere_point(const vec4 s, const vec3 point) {
|
glm_sphere_point(vec4 s, vec3 point) {
|
||||||
float rr;
|
float rr;
|
||||||
rr = s[3] * s[3];
|
rr = s[3] * s[3];
|
||||||
return glm_vec3_distance2(point, s) <= rr;
|
return glm_vec3_distance2(point, s) <= rr;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#define cglm_util_h
|
#define cglm_util_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define GLM_MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
|
#define GLM_MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
|
||||||
#define GLM_MAX(X, Y) (((X) > (Y)) ? (X) : (Y))
|
#define GLM_MAX(X, Y) (((X) > (Y)) ? (X) : (Y))
|
||||||
|
|||||||
@@ -31,6 +31,9 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <float.h>
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief fill a vector with specified value
|
* @brief fill a vector with specified value
|
||||||
@@ -52,7 +55,7 @@ glm_vec3_broadcast(float val, vec3 d) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_eq(const vec3 v, float val) {
|
glm_vec3_eq(vec3 v, float val) {
|
||||||
return v[0] == val && v[0] == v[1] && v[0] == v[2];
|
return v[0] == val && v[0] == v[1] && v[0] == v[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +67,7 @@ glm_vec3_eq(const vec3 v, float val) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_eq_eps(const vec3 v, float val) {
|
glm_vec3_eq_eps(vec3 v, float val) {
|
||||||
return fabsf(v[0] - val) <= FLT_EPSILON
|
return fabsf(v[0] - val) <= FLT_EPSILON
|
||||||
&& fabsf(v[1] - val) <= FLT_EPSILON
|
&& fabsf(v[1] - val) <= FLT_EPSILON
|
||||||
&& fabsf(v[2] - val) <= FLT_EPSILON;
|
&& fabsf(v[2] - val) <= FLT_EPSILON;
|
||||||
@@ -77,7 +80,7 @@ glm_vec3_eq_eps(const vec3 v, float val) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_eq_all(const vec3 v) {
|
glm_vec3_eq_all(vec3 v) {
|
||||||
return v[0] == v[1] && v[0] == v[2];
|
return v[0] == v[1] && v[0] == v[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +92,7 @@ glm_vec3_eq_all(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_eqv(const vec3 a, const vec3 b) {
|
glm_vec3_eqv(vec3 a, vec3 b) {
|
||||||
return a[0] == b[0]
|
return a[0] == b[0]
|
||||||
&& a[1] == b[1]
|
&& a[1] == b[1]
|
||||||
&& a[2] == b[2];
|
&& a[2] == b[2];
|
||||||
@@ -103,7 +106,7 @@ glm_vec3_eqv(const vec3 a, const vec3 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_eqv_eps(const vec3 a, const vec3 b) {
|
glm_vec3_eqv_eps(vec3 a, vec3 b) {
|
||||||
return fabsf(a[0] - b[0]) <= FLT_EPSILON
|
return fabsf(a[0] - b[0]) <= FLT_EPSILON
|
||||||
&& fabsf(a[1] - b[1]) <= FLT_EPSILON
|
&& fabsf(a[1] - b[1]) <= FLT_EPSILON
|
||||||
&& fabsf(a[2] - b[2]) <= FLT_EPSILON;
|
&& fabsf(a[2] - b[2]) <= FLT_EPSILON;
|
||||||
@@ -116,7 +119,7 @@ glm_vec3_eqv_eps(const vec3 a, const vec3 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_max(const vec3 v) {
|
glm_vec3_max(vec3 v) {
|
||||||
float max;
|
float max;
|
||||||
|
|
||||||
max = v[0];
|
max = v[0];
|
||||||
@@ -135,7 +138,7 @@ glm_vec3_max(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_min(const vec3 v) {
|
glm_vec3_min(vec3 v) {
|
||||||
float min;
|
float min;
|
||||||
|
|
||||||
min = v[0];
|
min = v[0];
|
||||||
@@ -155,7 +158,7 @@ glm_vec3_min(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_isnan(const vec3 v) {
|
glm_vec3_isnan(vec3 v) {
|
||||||
return isnan(v[0]) || isnan(v[1]) || isnan(v[2]);
|
return isnan(v[0]) || isnan(v[1]) || isnan(v[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +170,7 @@ glm_vec3_isnan(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_isinf(const vec3 v) {
|
glm_vec3_isinf(vec3 v) {
|
||||||
return isinf(v[0]) || isinf(v[1]) || isinf(v[2]);
|
return isinf(v[0]) || isinf(v[1]) || isinf(v[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,7 +182,7 @@ glm_vec3_isinf(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec3_isvalid(const vec3 v) {
|
glm_vec3_isvalid(vec3 v) {
|
||||||
return !glm_vec3_isnan(v) && !glm_vec3_isinf(v);
|
return !glm_vec3_isnan(v) && !glm_vec3_isinf(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +195,7 @@ glm_vec3_isvalid(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_sign(const vec3 v, vec3 dest) {
|
glm_vec3_sign(vec3 v, vec3 dest) {
|
||||||
dest[0] = glm_signf(v[0]);
|
dest[0] = glm_signf(v[0]);
|
||||||
dest[1] = glm_signf(v[1]);
|
dest[1] = glm_signf(v[1]);
|
||||||
dest[2] = glm_signf(v[2]);
|
dest[2] = glm_signf(v[2]);
|
||||||
@@ -206,7 +209,7 @@ glm_vec3_sign(const vec3 v, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_sqrt(const vec3 v, vec3 dest) {
|
glm_vec3_sqrt(vec3 v, vec3 dest) {
|
||||||
dest[0] = sqrtf(v[0]);
|
dest[0] = sqrtf(v[0]);
|
||||||
dest[1] = sqrtf(v[1]);
|
dest[1] = sqrtf(v[1]);
|
||||||
dest[2] = sqrtf(v[2]);
|
dest[2] = sqrtf(v[2]);
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3(const vec4 v4, vec3 dest) {
|
glm_vec3(vec4 v4, vec3 dest) {
|
||||||
dest[0] = v4[0];
|
dest[0] = v4[0];
|
||||||
dest[1] = v4[1];
|
dest[1] = v4[1];
|
||||||
dest[2] = v4[2];
|
dest[2] = v4[2];
|
||||||
@@ -125,7 +125,7 @@ glm_vec3(const vec4 v4, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_copy(const vec3 a, vec3 dest) {
|
glm_vec3_copy(vec3 a, vec3 dest) {
|
||||||
dest[0] = a[0];
|
dest[0] = a[0];
|
||||||
dest[1] = a[1];
|
dest[1] = a[1];
|
||||||
dest[2] = a[2];
|
dest[2] = a[2];
|
||||||
@@ -163,7 +163,7 @@ glm_vec3_one(vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_dot(const vec3 a, const vec3 b) {
|
glm_vec3_dot(vec3 a, vec3 b) {
|
||||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ glm_vec3_dot(const vec3 a, const vec3 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_norm2(const vec3 v) {
|
glm_vec3_norm2(vec3 v) {
|
||||||
return glm_vec3_dot(v, v);
|
return glm_vec3_dot(v, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ glm_vec3_norm2(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_norm(const vec3 v) {
|
glm_vec3_norm(vec3 v) {
|
||||||
return sqrtf(glm_vec3_norm2(v));
|
return sqrtf(glm_vec3_norm2(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@ glm_vec3_norm(const vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_add(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_add(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] = a[0] + b[0];
|
dest[0] = a[0] + b[0];
|
||||||
dest[1] = a[1] + b[1];
|
dest[1] = a[1] + b[1];
|
||||||
dest[2] = a[2] + b[2];
|
dest[2] = a[2] + b[2];
|
||||||
@@ -221,7 +221,7 @@ glm_vec3_add(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_adds(const vec3 v, float s, vec3 dest) {
|
glm_vec3_adds(vec3 v, float s, vec3 dest) {
|
||||||
dest[0] = v[0] + s;
|
dest[0] = v[0] + s;
|
||||||
dest[1] = v[1] + s;
|
dest[1] = v[1] + s;
|
||||||
dest[2] = v[2] + s;
|
dest[2] = v[2] + s;
|
||||||
@@ -236,7 +236,7 @@ glm_vec3_adds(const vec3 v, float s, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_sub(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_sub(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] = a[0] - b[0];
|
dest[0] = a[0] - b[0];
|
||||||
dest[1] = a[1] - b[1];
|
dest[1] = a[1] - b[1];
|
||||||
dest[2] = a[2] - b[2];
|
dest[2] = a[2] - b[2];
|
||||||
@@ -251,7 +251,7 @@ glm_vec3_sub(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_subs(const vec3 v, float s, vec3 dest) {
|
glm_vec3_subs(vec3 v, float s, vec3 dest) {
|
||||||
dest[0] = v[0] - s;
|
dest[0] = v[0] - s;
|
||||||
dest[1] = v[1] - s;
|
dest[1] = v[1] - s;
|
||||||
dest[2] = v[2] - s;
|
dest[2] = v[2] - s;
|
||||||
@@ -266,7 +266,7 @@ glm_vec3_subs(const vec3 v, float s, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_mul(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_mul(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] = a[0] * b[0];
|
dest[0] = a[0] * b[0];
|
||||||
dest[1] = a[1] * b[1];
|
dest[1] = a[1] * b[1];
|
||||||
dest[2] = a[2] * b[2];
|
dest[2] = a[2] * b[2];
|
||||||
@@ -281,7 +281,7 @@ glm_vec3_mul(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_scale(const vec3 v, float s, vec3 dest) {
|
glm_vec3_scale(vec3 v, float s, vec3 dest) {
|
||||||
dest[0] = v[0] * s;
|
dest[0] = v[0] * s;
|
||||||
dest[1] = v[1] * s;
|
dest[1] = v[1] * s;
|
||||||
dest[2] = v[2] * s;
|
dest[2] = v[2] * s;
|
||||||
@@ -296,7 +296,7 @@ glm_vec3_scale(const vec3 v, float s, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_scale_as(const vec3 v, float s, vec3 dest) {
|
glm_vec3_scale_as(vec3 v, float s, vec3 dest) {
|
||||||
float norm;
|
float norm;
|
||||||
norm = glm_vec3_norm(v);
|
norm = glm_vec3_norm(v);
|
||||||
|
|
||||||
@@ -317,7 +317,7 @@ glm_vec3_scale_as(const vec3 v, float s, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_div(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_div(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] = a[0] / b[0];
|
dest[0] = a[0] / b[0];
|
||||||
dest[1] = a[1] / b[1];
|
dest[1] = a[1] / b[1];
|
||||||
dest[2] = a[2] / b[2];
|
dest[2] = a[2] / b[2];
|
||||||
@@ -332,7 +332,7 @@ glm_vec3_div(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_divs(const vec3 v, float s, vec3 dest) {
|
glm_vec3_divs(vec3 v, float s, vec3 dest) {
|
||||||
dest[0] = v[0] / s;
|
dest[0] = v[0] / s;
|
||||||
dest[1] = v[1] / s;
|
dest[1] = v[1] / s;
|
||||||
dest[2] = v[2] / s;
|
dest[2] = v[2] / s;
|
||||||
@@ -349,7 +349,7 @@ glm_vec3_divs(const vec3 v, float s, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] += a[0] + b[0];
|
dest[0] += a[0] + b[0];
|
||||||
dest[1] += a[1] + b[1];
|
dest[1] += a[1] + b[1];
|
||||||
dest[2] += a[2] + b[2];
|
dest[2] += a[2] + b[2];
|
||||||
@@ -366,7 +366,7 @@ glm_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] += a[0] - b[0];
|
dest[0] += a[0] - b[0];
|
||||||
dest[1] += a[1] - b[1];
|
dest[1] += a[1] - b[1];
|
||||||
dest[2] += a[2] - b[2];
|
dest[2] += a[2] - b[2];
|
||||||
@@ -383,7 +383,7 @@ glm_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] += a[0] * b[0];
|
dest[0] += a[0] * b[0];
|
||||||
dest[1] += a[1] * b[1];
|
dest[1] += a[1] * b[1];
|
||||||
dest[2] += a[2] * b[2];
|
dest[2] += a[2] * b[2];
|
||||||
@@ -400,7 +400,7 @@ glm_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_muladds(const vec3 a, float s, vec3 dest) {
|
glm_vec3_muladds(vec3 a, float s, vec3 dest) {
|
||||||
dest[0] += a[0] * s;
|
dest[0] += a[0] * s;
|
||||||
dest[1] += a[1] * s;
|
dest[1] += a[1] * s;
|
||||||
dest[2] += a[2] * s;
|
dest[2] += a[2] * s;
|
||||||
@@ -417,7 +417,7 @@ glm_vec3_muladds(const vec3 a, float s, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] += glm_max(a[0], b[0]);
|
dest[0] += glm_max(a[0], b[0]);
|
||||||
dest[1] += glm_max(a[1], b[1]);
|
dest[1] += glm_max(a[1], b[1]);
|
||||||
dest[2] += glm_max(a[2], b[2]);
|
dest[2] += glm_max(a[2], b[2]);
|
||||||
@@ -428,13 +428,13 @@ glm_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*
|
*
|
||||||
* it applies += operator so dest must be initialized
|
* it applies += operator so dest must be initialized
|
||||||
*
|
*
|
||||||
* @param[in] a vector 1
|
* @param[in] a vector
|
||||||
* @param[in] b vector 2
|
* @param[in] b scalar
|
||||||
* @param[out] dest dest += min(a, b)
|
* @param[out] dest dest += min(a, b)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] += glm_min(a[0], b[0]);
|
dest[0] += glm_min(a[0], b[0]);
|
||||||
dest[1] += glm_min(a[1], b[1]);
|
dest[1] += glm_min(a[1], b[1]);
|
||||||
dest[2] += glm_min(a[2], b[2]);
|
dest[2] += glm_min(a[2], b[2]);
|
||||||
@@ -448,7 +448,7 @@ glm_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_negate_to(const vec3 v, vec3 dest) {
|
glm_vec3_negate_to(vec3 v, vec3 dest) {
|
||||||
dest[0] = -v[0];
|
dest[0] = -v[0];
|
||||||
dest[1] = -v[1];
|
dest[1] = -v[1];
|
||||||
dest[2] = -v[2];
|
dest[2] = -v[2];
|
||||||
@@ -493,7 +493,7 @@ glm_vec3_normalize(vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_normalize_to(const vec3 v, vec3 dest) {
|
glm_vec3_normalize_to(vec3 v, vec3 dest) {
|
||||||
float norm;
|
float norm;
|
||||||
|
|
||||||
norm = glm_vec3_norm(v);
|
norm = glm_vec3_norm(v);
|
||||||
@@ -515,7 +515,7 @@ glm_vec3_normalize_to(const vec3 v, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_cross(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_cross(vec3 a, vec3 b, vec3 dest) {
|
||||||
/* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */
|
/* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */
|
||||||
dest[0] = a[1] * b[2] - a[2] * b[1];
|
dest[0] = a[1] * b[2] - a[2] * b[1];
|
||||||
dest[1] = a[2] * b[0] - a[0] * b[2];
|
dest[1] = a[2] * b[0] - a[0] * b[2];
|
||||||
@@ -531,7 +531,7 @@ glm_vec3_cross(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_cross(a, b, dest);
|
glm_vec3_cross(a, b, dest);
|
||||||
glm_vec3_normalize(dest);
|
glm_vec3_normalize(dest);
|
||||||
}
|
}
|
||||||
@@ -546,7 +546,7 @@ glm_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_angle(const vec3 a, const vec3 b) {
|
glm_vec3_angle(vec3 a, vec3 b) {
|
||||||
float norm, dot;
|
float norm, dot;
|
||||||
|
|
||||||
/* maybe compiler generate approximation instruction (rcp) */
|
/* maybe compiler generate approximation instruction (rcp) */
|
||||||
@@ -570,7 +570,7 @@ glm_vec3_angle(const vec3 a, const vec3 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_rotate(vec3 v, float angle, const vec3 axis) {
|
glm_vec3_rotate(vec3 v, float angle, vec3 axis) {
|
||||||
vec3 v1, v2, k;
|
vec3 v1, v2, k;
|
||||||
float c, s;
|
float c, s;
|
||||||
|
|
||||||
@@ -608,7 +608,7 @@ glm_vec3_rotate(vec3 v, float angle, const vec3 axis) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) {
|
glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) {
|
||||||
vec4 x, y, z, res;
|
vec4 x, y, z, res;
|
||||||
|
|
||||||
glm_vec4_normalize_to(m[0], x);
|
glm_vec4_normalize_to(m[0], x);
|
||||||
@@ -631,7 +631,7 @@ glm_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) {
|
glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) {
|
||||||
vec4 res, x, y, z;
|
vec4 res, x, y, z;
|
||||||
|
|
||||||
glm_vec4(m[0], 0.0f, x);
|
glm_vec4(m[0], 0.0f, x);
|
||||||
@@ -658,7 +658,7 @@ glm_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_proj(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_proj(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_scale(b,
|
glm_vec3_scale(b,
|
||||||
glm_vec3_dot(a, b) / glm_vec3_norm2(b),
|
glm_vec3_dot(a, b) / glm_vec3_norm2(b),
|
||||||
dest);
|
dest);
|
||||||
@@ -673,7 +673,7 @@ glm_vec3_proj(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_center(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_center(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_add(a, b, dest);
|
glm_vec3_add(a, b, dest);
|
||||||
glm_vec3_scale(dest, 0.5f, dest);
|
glm_vec3_scale(dest, 0.5f, dest);
|
||||||
}
|
}
|
||||||
@@ -687,7 +687,7 @@ glm_vec3_center(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_distance2(const vec3 a, const vec3 b) {
|
glm_vec3_distance2(vec3 a, vec3 b) {
|
||||||
return glm_pow2(b[0] - a[0])
|
return glm_pow2(b[0] - a[0])
|
||||||
+ glm_pow2(b[1] - a[1])
|
+ glm_pow2(b[1] - a[1])
|
||||||
+ glm_pow2(b[2] - a[2]);
|
+ glm_pow2(b[2] - a[2]);
|
||||||
@@ -702,7 +702,7 @@ glm_vec3_distance2(const vec3 a, const vec3 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec3_distance(const vec3 a, const vec3 b) {
|
glm_vec3_distance(vec3 a, vec3 b) {
|
||||||
return sqrtf(glm_vec3_distance2(a, b));
|
return sqrtf(glm_vec3_distance2(a, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -715,7 +715,7 @@ glm_vec3_distance(const vec3 a, const vec3 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] = glm_max(a[0], b[0]);
|
dest[0] = glm_max(a[0], b[0]);
|
||||||
dest[1] = glm_max(a[1], b[1]);
|
dest[1] = glm_max(a[1], b[1]);
|
||||||
dest[2] = glm_max(a[2], b[2]);
|
dest[2] = glm_max(a[2], b[2]);
|
||||||
@@ -730,7 +730,7 @@ glm_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_minv(const vec3 a, const vec3 b, vec3 dest) {
|
glm_vec3_minv(vec3 a, vec3 b, vec3 dest) {
|
||||||
dest[0] = glm_min(a[0], b[0]);
|
dest[0] = glm_min(a[0], b[0]);
|
||||||
dest[1] = glm_min(a[1], b[1]);
|
dest[1] = glm_min(a[1], b[1]);
|
||||||
dest[2] = glm_min(a[2], b[2]);
|
dest[2] = glm_min(a[2], b[2]);
|
||||||
@@ -744,7 +744,7 @@ glm_vec3_minv(const vec3 a, const vec3 b, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_ortho(const vec3 v, vec3 dest) {
|
glm_vec3_ortho(vec3 v, vec3 dest) {
|
||||||
dest[0] = v[1] - v[2];
|
dest[0] = v[1] - v[2];
|
||||||
dest[1] = v[2] - v[0];
|
dest[1] = v[2] - v[0];
|
||||||
dest[2] = v[0] - v[1];
|
dest[2] = v[0] - v[1];
|
||||||
@@ -777,7 +777,7 @@ glm_vec3_clamp(vec3 v, float minVal, float maxVal) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) {
|
glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) {
|
||||||
vec3 s, v;
|
vec3 s, v;
|
||||||
|
|
||||||
/* from + s * (to - from) */
|
/* from + s * (to - from) */
|
||||||
@@ -798,7 +798,7 @@ glm_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_cross(const vec3 a, const vec3 b, vec3 d) {
|
glm_cross(vec3 a, vec3 b, vec3 d) {
|
||||||
glm_vec3_cross(a, b, d);
|
glm_vec3_cross(a, b, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -814,7 +814,7 @@ glm_cross(const vec3 a, const vec3 b, vec3 d) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_dot(const vec3 a, const vec3 b) {
|
glm_dot(vec3 a, vec3 b) {
|
||||||
return glm_vec3_dot(a, b);
|
return glm_vec3_dot(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -841,7 +841,7 @@ glm_normalize(vec3 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_normalize_to(const vec3 v, vec3 dest) {
|
glm_normalize_to(vec3 v, vec3 dest) {
|
||||||
glm_vec3_normalize_to(v, dest);
|
glm_vec3_normalize_to(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,9 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "vec3-ext.h"
|
#include "vec3-ext.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <float.h>
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief fill a vector with specified value
|
* @brief fill a vector with specified value
|
||||||
@@ -56,7 +59,7 @@ glm_vec4_broadcast(float val, vec4 d) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_eq(const vec4 v, float val) {
|
glm_vec4_eq(vec4 v, float val) {
|
||||||
return v[0] == val
|
return v[0] == val
|
||||||
&& v[0] == v[1]
|
&& v[0] == v[1]
|
||||||
&& v[0] == v[2]
|
&& v[0] == v[2]
|
||||||
@@ -71,7 +74,7 @@ glm_vec4_eq(const vec4 v, float val) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_eq_eps(const vec4 v, float val) {
|
glm_vec4_eq_eps(vec4 v, float val) {
|
||||||
return fabsf(v[0] - val) <= FLT_EPSILON
|
return fabsf(v[0] - val) <= FLT_EPSILON
|
||||||
&& fabsf(v[1] - val) <= FLT_EPSILON
|
&& fabsf(v[1] - val) <= FLT_EPSILON
|
||||||
&& fabsf(v[2] - val) <= FLT_EPSILON
|
&& fabsf(v[2] - val) <= FLT_EPSILON
|
||||||
@@ -85,7 +88,7 @@ glm_vec4_eq_eps(const vec4 v, float val) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_eq_all(const vec4 v) {
|
glm_vec4_eq_all(vec4 v) {
|
||||||
return v[0] == v[1]
|
return v[0] == v[1]
|
||||||
&& v[0] == v[2]
|
&& v[0] == v[2]
|
||||||
&& v[0] == v[3];
|
&& v[0] == v[3];
|
||||||
@@ -99,7 +102,7 @@ glm_vec4_eq_all(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_eqv(const vec4 a, const vec4 b) {
|
glm_vec4_eqv(vec4 a, vec4 b) {
|
||||||
return a[0] == b[0]
|
return a[0] == b[0]
|
||||||
&& a[1] == b[1]
|
&& a[1] == b[1]
|
||||||
&& a[2] == b[2]
|
&& a[2] == b[2]
|
||||||
@@ -114,7 +117,7 @@ glm_vec4_eqv(const vec4 a, const vec4 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_eqv_eps(const vec4 a, const vec4 b) {
|
glm_vec4_eqv_eps(vec4 a, vec4 b) {
|
||||||
return fabsf(a[0] - b[0]) <= FLT_EPSILON
|
return fabsf(a[0] - b[0]) <= FLT_EPSILON
|
||||||
&& fabsf(a[1] - b[1]) <= FLT_EPSILON
|
&& fabsf(a[1] - b[1]) <= FLT_EPSILON
|
||||||
&& fabsf(a[2] - b[2]) <= FLT_EPSILON
|
&& fabsf(a[2] - b[2]) <= FLT_EPSILON
|
||||||
@@ -128,7 +131,7 @@ glm_vec4_eqv_eps(const vec4 a, const vec4 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec4_max(const vec4 v) {
|
glm_vec4_max(vec4 v) {
|
||||||
float max;
|
float max;
|
||||||
|
|
||||||
max = glm_vec3_max(v);
|
max = glm_vec3_max(v);
|
||||||
@@ -145,7 +148,7 @@ glm_vec4_max(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec4_min(const vec4 v) {
|
glm_vec4_min(vec4 v) {
|
||||||
float min;
|
float min;
|
||||||
|
|
||||||
min = glm_vec3_min(v);
|
min = glm_vec3_min(v);
|
||||||
@@ -163,7 +166,7 @@ glm_vec4_min(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_isnan(const vec4 v) {
|
glm_vec4_isnan(vec4 v) {
|
||||||
return isnan(v[0]) || isnan(v[1]) || isnan(v[2]) || isnan(v[3]);
|
return isnan(v[0]) || isnan(v[1]) || isnan(v[2]) || isnan(v[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +178,7 @@ glm_vec4_isnan(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_isinf(const vec4 v) {
|
glm_vec4_isinf(vec4 v) {
|
||||||
return isinf(v[0]) || isinf(v[1]) || isinf(v[2]) || isinf(v[3]);
|
return isinf(v[0]) || isinf(v[1]) || isinf(v[2]) || isinf(v[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,7 +190,7 @@ glm_vec4_isinf(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_vec4_isvalid(const vec4 v) {
|
glm_vec4_isvalid(vec4 v) {
|
||||||
return !glm_vec4_isnan(v) && !glm_vec4_isinf(v);
|
return !glm_vec4_isnan(v) && !glm_vec4_isinf(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +203,7 @@ glm_vec4_isvalid(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_sign(const vec4 v, vec4 dest) {
|
glm_vec4_sign(vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE2__ ) || defined( __SSE2__ )
|
#if defined( __SSE2__ ) || defined( __SSE2__ )
|
||||||
__m128 x0, x1, x2, x3, x4;
|
__m128 x0, x1, x2, x3, x4;
|
||||||
|
|
||||||
@@ -228,7 +231,7 @@ glm_vec4_sign(const vec4 v, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_sqrt(const vec4 v, vec4 dest) {
|
glm_vec4_sqrt(vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_sqrt_ps(glmm_load(v)));
|
glmm_store(dest, _mm_sqrt_ps(glmm_load(v)));
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4(const vec3 v3, float last, vec4 dest) {
|
glm_vec4(vec3 v3, float last, vec4 dest) {
|
||||||
dest[0] = v3[0];
|
dest[0] = v3[0];
|
||||||
dest[1] = v3[1];
|
dest[1] = v3[1];
|
||||||
dest[2] = v3[2];
|
dest[2] = v3[2];
|
||||||
@@ -105,7 +105,7 @@ glm_vec4(const vec3 v3, float last, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_copy3(const vec4 a, vec3 dest) {
|
glm_vec4_copy3(vec4 a, vec3 dest) {
|
||||||
dest[0] = a[0];
|
dest[0] = a[0];
|
||||||
dest[1] = a[1];
|
dest[1] = a[1];
|
||||||
dest[2] = a[2];
|
dest[2] = a[2];
|
||||||
@@ -119,11 +119,9 @@ glm_vec4_copy3(const vec4 a, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_copy(const vec4 v, vec4 dest) {
|
glm_vec4_copy(vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, glmm_load(v));
|
glmm_store(dest, glmm_load(v));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vld1q_f32(v));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = v[0];
|
dest[0] = v[0];
|
||||||
dest[1] = v[1];
|
dest[1] = v[1];
|
||||||
@@ -142,7 +140,7 @@ glm_vec4_copy(const vec4 v, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_ucopy(const vec4 v, vec4 dest) {
|
glm_vec4_ucopy(vec4 v, vec4 dest) {
|
||||||
dest[0] = v[0];
|
dest[0] = v[0];
|
||||||
dest[1] = v[1];
|
dest[1] = v[1];
|
||||||
dest[2] = v[2];
|
dest[2] = v[2];
|
||||||
@@ -159,8 +157,6 @@ void
|
|||||||
glm_vec4_zero(vec4 v) {
|
glm_vec4_zero(vec4 v) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(v, _mm_setzero_ps());
|
glmm_store(v, _mm_setzero_ps());
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(v, vdupq_n_f32(0.0f));
|
|
||||||
#else
|
#else
|
||||||
v[0] = 0.0f;
|
v[0] = 0.0f;
|
||||||
v[1] = 0.0f;
|
v[1] = 0.0f;
|
||||||
@@ -179,8 +175,6 @@ void
|
|||||||
glm_vec4_one(vec4 v) {
|
glm_vec4_one(vec4 v) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(v, _mm_set1_ps(1.0f));
|
glmm_store(v, _mm_set1_ps(1.0f));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(v, vdupq_n_f32(1.0f));
|
|
||||||
#else
|
#else
|
||||||
v[0] = 1.0f;
|
v[0] = 1.0f;
|
||||||
v[1] = 1.0f;
|
v[1] = 1.0f;
|
||||||
@@ -199,9 +193,12 @@ glm_vec4_one(vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec4_dot(const vec4 a, const vec4 b) {
|
glm_vec4_dot(vec4 a, vec4 b) {
|
||||||
#if defined(CGLM_SIMD)
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
return glmm_dot(glmm_load(a), glmm_load(b));
|
__m128 x0;
|
||||||
|
x0 = _mm_mul_ps(glmm_load(a), glmm_load(b));
|
||||||
|
x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2));
|
||||||
|
return _mm_cvtss_f32(_mm_add_ss(x0, glmm_shuff1(x0, 0, 1, 0, 1)));
|
||||||
#else
|
#else
|
||||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
|
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
|
||||||
#endif
|
#endif
|
||||||
@@ -220,8 +217,16 @@ glm_vec4_dot(const vec4 a, const vec4 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec4_norm2(const vec4 v) {
|
glm_vec4_norm2(vec4 v) {
|
||||||
return glm_vec4_dot(v, v);
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
|
__m128 x0;
|
||||||
|
x0 = glmm_load(v);
|
||||||
|
x0 = _mm_mul_ps(x0, x0);
|
||||||
|
x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2));
|
||||||
|
return _mm_cvtss_f32(_mm_add_ss(x0, glmm_shuff1(x0, 0, 1, 0, 1)));
|
||||||
|
#else
|
||||||
|
return v[0] * v[0] + v[1] * v[1] + v[2] * v[2] + v[3] * v[3];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -233,11 +238,13 @@ glm_vec4_norm2(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec4_norm(const vec4 v) {
|
glm_vec4_norm(vec4 v) {
|
||||||
#if defined(CGLM_SIMD)
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
return glmm_norm(glmm_load(v));
|
__m128 x0;
|
||||||
|
x0 = glmm_load(v);
|
||||||
|
return _mm_cvtss_f32(_mm_sqrt_ss(glmm_dot(x0, x0)));
|
||||||
#else
|
#else
|
||||||
return sqrtf(glm_vec4_dot(v, v));
|
return sqrtf(glm_vec4_norm2(v));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,11 +257,9 @@ glm_vec4_norm(const vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_add(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_add(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(a), glmm_load(b)));
|
glmm_store(dest, _mm_add_ps(glmm_load(a), glmm_load(b)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(a), vld1q_f32(b)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = a[0] + b[0];
|
dest[0] = a[0] + b[0];
|
||||||
dest[1] = a[1] + b[1];
|
dest[1] = a[1] + b[1];
|
||||||
@@ -272,11 +277,9 @@ glm_vec4_add(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_adds(const vec4 v, float s, vec4 dest) {
|
glm_vec4_adds(vec4 v, float s, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(v), _mm_set1_ps(s)));
|
glmm_store(dest, _mm_add_ps(glmm_load(v), _mm_set1_ps(s)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(v), vdupq_n_f32(s)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = v[0] + s;
|
dest[0] = v[0] + s;
|
||||||
dest[1] = v[1] + s;
|
dest[1] = v[1] + s;
|
||||||
@@ -294,11 +297,9 @@ glm_vec4_adds(const vec4 v, float s, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_sub(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_sub(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_sub_ps(glmm_load(a), glmm_load(b)));
|
glmm_store(dest, _mm_sub_ps(glmm_load(a), glmm_load(b)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vsubq_f32(vld1q_f32(a), vld1q_f32(b)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = a[0] - b[0];
|
dest[0] = a[0] - b[0];
|
||||||
dest[1] = a[1] - b[1];
|
dest[1] = a[1] - b[1];
|
||||||
@@ -316,11 +317,9 @@ glm_vec4_sub(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_subs(const vec4 v, float s, vec4 dest) {
|
glm_vec4_subs(vec4 v, float s, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_sub_ps(glmm_load(v), _mm_set1_ps(s)));
|
glmm_store(dest, _mm_sub_ps(glmm_load(v), _mm_set1_ps(s)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vsubq_f32(vld1q_f32(v), vdupq_n_f32(s)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = v[0] - s;
|
dest[0] = v[0] - s;
|
||||||
dest[1] = v[1] - s;
|
dest[1] = v[1] - s;
|
||||||
@@ -338,11 +337,9 @@ glm_vec4_subs(const vec4 v, float s, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_mul(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_mul(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_mul_ps(glmm_load(a), glmm_load(b)));
|
glmm_store(dest, _mm_mul_ps(glmm_load(a), glmm_load(b)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vmulq_f32(vld1q_f32(a), vld1q_f32(b)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = a[0] * b[0];
|
dest[0] = a[0] * b[0];
|
||||||
dest[1] = a[1] * b[1];
|
dest[1] = a[1] * b[1];
|
||||||
@@ -360,11 +357,9 @@ glm_vec4_mul(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_scale(const vec4 v, float s, vec4 dest) {
|
glm_vec4_scale(vec4 v, float s, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_mul_ps(glmm_load(v), _mm_set1_ps(s)));
|
glmm_store(dest, _mm_mul_ps(glmm_load(v), _mm_set1_ps(s)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vmulq_f32(vld1q_f32(v), vdupq_n_f32(s)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = v[0] * s;
|
dest[0] = v[0] * s;
|
||||||
dest[1] = v[1] * s;
|
dest[1] = v[1] * s;
|
||||||
@@ -382,7 +377,7 @@ glm_vec4_scale(const vec4 v, float s, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_scale_as(const vec4 v, float s, vec4 dest) {
|
glm_vec4_scale_as(vec4 v, float s, vec4 dest) {
|
||||||
float norm;
|
float norm;
|
||||||
norm = glm_vec4_norm(v);
|
norm = glm_vec4_norm(v);
|
||||||
|
|
||||||
@@ -403,7 +398,7 @@ glm_vec4_scale_as(const vec4 v, float s, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_div(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_div(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_div_ps(glmm_load(a), glmm_load(b)));
|
glmm_store(dest, _mm_div_ps(glmm_load(a), glmm_load(b)));
|
||||||
#else
|
#else
|
||||||
@@ -423,7 +418,7 @@ glm_vec4_div(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_divs(const vec4 v, float s, vec4 dest) {
|
glm_vec4_divs(vec4 v, float s, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_div_ps(glmm_load(v), _mm_set1_ps(s)));
|
glmm_store(dest, _mm_div_ps(glmm_load(v), _mm_set1_ps(s)));
|
||||||
#else
|
#else
|
||||||
@@ -442,15 +437,11 @@ glm_vec4_divs(const vec4 v, float s, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
||||||
_mm_add_ps(glmm_load(a),
|
_mm_add_ps(glmm_load(a),
|
||||||
glmm_load(b))));
|
glmm_load(b))));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
|
|
||||||
vaddq_f32(vld1q_f32(a),
|
|
||||||
vld1q_f32(b))));
|
|
||||||
#else
|
#else
|
||||||
dest[0] += a[0] + b[0];
|
dest[0] += a[0] + b[0];
|
||||||
dest[1] += a[1] + b[1];
|
dest[1] += a[1] + b[1];
|
||||||
@@ -470,15 +461,11 @@ glm_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
||||||
_mm_sub_ps(glmm_load(a),
|
_mm_sub_ps(glmm_load(a),
|
||||||
glmm_load(b))));
|
glmm_load(b))));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
|
|
||||||
vsubq_f32(vld1q_f32(a),
|
|
||||||
vld1q_f32(b))));
|
|
||||||
#else
|
#else
|
||||||
dest[0] += a[0] - b[0];
|
dest[0] += a[0] - b[0];
|
||||||
dest[1] += a[1] - b[1];
|
dest[1] += a[1] - b[1];
|
||||||
@@ -498,15 +485,11 @@ glm_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
||||||
_mm_mul_ps(glmm_load(a),
|
_mm_mul_ps(glmm_load(a),
|
||||||
glmm_load(b))));
|
glmm_load(b))));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
|
|
||||||
vmulq_f32(vld1q_f32(a),
|
|
||||||
vld1q_f32(b))));
|
|
||||||
#else
|
#else
|
||||||
dest[0] += a[0] * b[0];
|
dest[0] += a[0] * b[0];
|
||||||
dest[1] += a[1] * b[1];
|
dest[1] += a[1] * b[1];
|
||||||
@@ -526,15 +509,11 @@ glm_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_muladds(const vec4 a, float s, vec4 dest) {
|
glm_vec4_muladds(vec4 a, float s, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
||||||
_mm_mul_ps(glmm_load(a),
|
_mm_mul_ps(glmm_load(a),
|
||||||
_mm_set1_ps(s))));
|
_mm_set1_ps(s))));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
|
|
||||||
vsubq_f32(vld1q_f32(a),
|
|
||||||
vdupq_n_f32(s))));
|
|
||||||
#else
|
#else
|
||||||
dest[0] += a[0] * s;
|
dest[0] += a[0] * s;
|
||||||
dest[1] += a[1] * s;
|
dest[1] += a[1] * s;
|
||||||
@@ -554,15 +533,11 @@ glm_vec4_muladds(const vec4 a, float s, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
||||||
_mm_max_ps(glmm_load(a),
|
_mm_max_ps(glmm_load(a),
|
||||||
glmm_load(b))));
|
glmm_load(b))));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
|
|
||||||
vmaxq_f32(vld1q_f32(a),
|
|
||||||
vld1q_f32(b))));
|
|
||||||
#else
|
#else
|
||||||
dest[0] += glm_max(a[0], b[0]);
|
dest[0] += glm_max(a[0], b[0]);
|
||||||
dest[1] += glm_max(a[1], b[1]);
|
dest[1] += glm_max(a[1], b[1]);
|
||||||
@@ -576,21 +551,17 @@ glm_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*
|
*
|
||||||
* it applies += operator so dest must be initialized
|
* it applies += operator so dest must be initialized
|
||||||
*
|
*
|
||||||
* @param[in] a vector 1
|
* @param[in] a vector
|
||||||
* @param[in] b vector 2
|
* @param[in] b scalar
|
||||||
* @param[out] dest dest += min(a, b)
|
* @param[out] dest dest += min(a, b)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_minadd(const vec4 a,const vec4 b, vec4 dest) {
|
glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
glmm_store(dest, _mm_add_ps(glmm_load(dest),
|
||||||
_mm_min_ps(glmm_load(a),
|
_mm_min_ps(glmm_load(a),
|
||||||
glmm_load(b))));
|
glmm_load(b))));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
|
|
||||||
vminq_f32(vld1q_f32(a),
|
|
||||||
vld1q_f32(b))));
|
|
||||||
#else
|
#else
|
||||||
dest[0] += glm_min(a[0], b[0]);
|
dest[0] += glm_min(a[0], b[0]);
|
||||||
dest[1] += glm_min(a[1], b[1]);
|
dest[1] += glm_min(a[1], b[1]);
|
||||||
@@ -607,11 +578,9 @@ glm_vec4_minadd(const vec4 a,const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_negate_to(const vec4 v, vec4 dest) {
|
glm_vec4_negate_to(vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_xor_ps(glmm_load(v), _mm_set1_ps(-0.0f)));
|
glmm_store(dest, _mm_xor_ps(glmm_load(v), _mm_set1_ps(-0.0f)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, veorq_s32(vld1q_f32(v), vdupq_n_f32(-0.0f)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = -v[0];
|
dest[0] = -v[0];
|
||||||
dest[1] = -v[1];
|
dest[1] = -v[1];
|
||||||
@@ -639,13 +608,13 @@ glm_vec4_negate(vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_normalize_to(const vec4 v, vec4 dest) {
|
glm_vec4_normalize_to(vec4 v, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
__m128 xdot, x0;
|
__m128 xdot, x0;
|
||||||
float dot;
|
float dot;
|
||||||
|
|
||||||
x0 = glmm_load(v);
|
x0 = glmm_load(v);
|
||||||
xdot = glmm_vdot(x0, x0);
|
xdot = glmm_dot(x0, x0);
|
||||||
dot = _mm_cvtss_f32(xdot);
|
dot = _mm_cvtss_f32(xdot);
|
||||||
|
|
||||||
if (dot == 0.0f) {
|
if (dot == 0.0f) {
|
||||||
@@ -688,17 +657,11 @@ glm_vec4_normalize(vec4 v) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_vec4_distance(const vec4 a, const vec4 b) {
|
glm_vec4_distance(vec4 a, vec4 b) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
|
||||||
return glmm_norm(_mm_sub_ps(glmm_load(b), glmm_load(a)));
|
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
return glmm_norm(vsubq_f32(glmm_load(a), glmm_load(b)));
|
|
||||||
#else
|
|
||||||
return sqrtf(glm_pow2(b[0] - a[0])
|
return sqrtf(glm_pow2(b[0] - a[0])
|
||||||
+ glm_pow2(b[1] - a[1])
|
+ glm_pow2(b[1] - a[1])
|
||||||
+ glm_pow2(b[2] - a[2])
|
+ glm_pow2(b[2] - a[2])
|
||||||
+ glm_pow2(b[3] - a[3]));
|
+ glm_pow2(b[3] - a[3]));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -710,11 +673,9 @@ glm_vec4_distance(const vec4 a, const vec4 b) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_max_ps(glmm_load(a), glmm_load(b)));
|
glmm_store(dest, _mm_max_ps(glmm_load(a), glmm_load(b)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vmaxq_f32(vld1q_f32(a), vld1q_f32(b)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = glm_max(a[0], b[0]);
|
dest[0] = glm_max(a[0], b[0]);
|
||||||
dest[1] = glm_max(a[1], b[1]);
|
dest[1] = glm_max(a[1], b[1]);
|
||||||
@@ -732,11 +693,9 @@ glm_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_minv(const vec4 a, const vec4 b, vec4 dest) {
|
glm_vec4_minv(vec4 a, vec4 b, vec4 dest) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(dest, _mm_min_ps(glmm_load(a), glmm_load(b)));
|
glmm_store(dest, _mm_min_ps(glmm_load(a), glmm_load(b)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(dest, vminq_f32(vld1q_f32(a), vld1q_f32(b)));
|
|
||||||
#else
|
#else
|
||||||
dest[0] = glm_min(a[0], b[0]);
|
dest[0] = glm_min(a[0], b[0]);
|
||||||
dest[1] = glm_min(a[1], b[1]);
|
dest[1] = glm_min(a[1], b[1]);
|
||||||
@@ -758,9 +717,6 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) {
|
|||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
glmm_store(v, _mm_min_ps(_mm_max_ps(glmm_load(v), _mm_set1_ps(minVal)),
|
glmm_store(v, _mm_min_ps(_mm_max_ps(glmm_load(v), _mm_set1_ps(minVal)),
|
||||||
_mm_set1_ps(maxVal)));
|
_mm_set1_ps(maxVal)));
|
||||||
#elif defined(CGLM_NEON_FP)
|
|
||||||
vst1q_f32(v, vminq_f32(vmaxq_f32(vld1q_f32(v), vdupq_n_f32(minVal)),
|
|
||||||
vdupq_n_f32(maxVal)));
|
|
||||||
#else
|
#else
|
||||||
v[0] = glm_clamp(v[0], minVal, maxVal);
|
v[0] = glm_clamp(v[0], minVal, maxVal);
|
||||||
v[1] = glm_clamp(v[1], minVal, maxVal);
|
v[1] = glm_clamp(v[1], minVal, maxVal);
|
||||||
@@ -781,7 +737,7 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) {
|
glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) {
|
||||||
vec4 s, v;
|
vec4 s, v;
|
||||||
|
|
||||||
/* from + s * (to - from) */
|
/* from + s * (to - from) */
|
||||||
@@ -791,23 +747,4 @@ glm_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) {
|
|||||||
glm_vec4_add(from, v, dest);
|
glm_vec4_add(from, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief helper to fill vec4 as [S^3, S^2, S, 1]
|
|
||||||
*
|
|
||||||
* @param[in] s parameter
|
|
||||||
* @param[out] dest destination
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_vec4_cubic(float s, vec4 dest) {
|
|
||||||
float ss;
|
|
||||||
|
|
||||||
ss = s * s;
|
|
||||||
|
|
||||||
dest[0] = ss * s;
|
|
||||||
dest[1] = ss;
|
|
||||||
dest[2] = s;
|
|
||||||
dest[3] = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* cglm_vec4_h */
|
#endif /* cglm_vec4_h */
|
||||||
|
|||||||
@@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
#define CGLM_VERSION_MAJOR 0
|
#define CGLM_VERSION_MAJOR 0
|
||||||
#define CGLM_VERSION_MINOR 5
|
#define CGLM_VERSION_MINOR 5
|
||||||
#define CGLM_VERSION_PATCH 4
|
#define CGLM_VERSION_PATCH 2
|
||||||
|
|
||||||
#endif /* cglm_version_h */
|
#endif /* cglm_version_h */
|
||||||
|
|||||||
65
makefile.am
65
makefile.am
@@ -34,32 +34,30 @@ test_tests_CFLAGS = $(checkCFLAGS)
|
|||||||
|
|
||||||
cglmdir=$(includedir)/cglm
|
cglmdir=$(includedir)/cglm
|
||||||
cglm_HEADERS = include/cglm/version.h \
|
cglm_HEADERS = include/cglm/version.h \
|
||||||
include/cglm/cglm.h \
|
include/cglm/cglm.h \
|
||||||
include/cglm/call.h \
|
include/cglm/call.h \
|
||||||
include/cglm/cam.h \
|
include/cglm/cam.h \
|
||||||
include/cglm/io.h \
|
include/cglm/io.h \
|
||||||
include/cglm/mat4.h \
|
include/cglm/mat4.h \
|
||||||
include/cglm/mat3.h \
|
include/cglm/mat3.h \
|
||||||
include/cglm/types.h \
|
include/cglm/types.h \
|
||||||
include/cglm/common.h \
|
include/cglm/common.h \
|
||||||
include/cglm/affine.h \
|
include/cglm/affine.h \
|
||||||
include/cglm/vec3.h \
|
include/cglm/vec3.h \
|
||||||
include/cglm/vec3-ext.h \
|
include/cglm/vec3-ext.h \
|
||||||
include/cglm/vec4.h \
|
include/cglm/vec4.h \
|
||||||
include/cglm/vec4-ext.h \
|
include/cglm/vec4-ext.h \
|
||||||
include/cglm/euler.h \
|
include/cglm/euler.h \
|
||||||
include/cglm/util.h \
|
include/cglm/util.h \
|
||||||
include/cglm/quat.h \
|
include/cglm/quat.h \
|
||||||
include/cglm/affine-mat.h \
|
include/cglm/affine-mat.h \
|
||||||
include/cglm/plane.h \
|
include/cglm/plane.h \
|
||||||
include/cglm/frustum.h \
|
include/cglm/frustum.h \
|
||||||
include/cglm/box.h \
|
include/cglm/box.h \
|
||||||
include/cglm/color.h \
|
include/cglm/color.h \
|
||||||
include/cglm/project.h \
|
include/cglm/project.h \
|
||||||
include/cglm/sphere.h \
|
include/cglm/sphere.h \
|
||||||
include/cglm/ease.h \
|
include/cglm/ease.h
|
||||||
include/cglm/curve.h \
|
|
||||||
include/cglm/bezier.h
|
|
||||||
|
|
||||||
cglm_calldir=$(includedir)/cglm/call
|
cglm_calldir=$(includedir)/cglm/call
|
||||||
cglm_call_HEADERS = include/cglm/call/mat4.h \
|
cglm_call_HEADERS = include/cglm/call/mat4.h \
|
||||||
@@ -76,14 +74,10 @@ cglm_call_HEADERS = include/cglm/call/mat4.h \
|
|||||||
include/cglm/call/box.h \
|
include/cglm/call/box.h \
|
||||||
include/cglm/call/project.h \
|
include/cglm/call/project.h \
|
||||||
include/cglm/call/sphere.h \
|
include/cglm/call/sphere.h \
|
||||||
include/cglm/call/ease.h \
|
include/cglm/call/ease.h
|
||||||
include/cglm/call/curve.h \
|
|
||||||
include/cglm/call/bezier.h
|
|
||||||
|
|
||||||
cglm_simddir=$(includedir)/cglm/simd
|
cglm_simddir=$(includedir)/cglm/simd
|
||||||
cglm_simd_HEADERS = include/cglm/simd/intrin.h \
|
cglm_simd_HEADERS = include/cglm/simd/intrin.h
|
||||||
include/cglm/simd/x86.h \
|
|
||||||
include/cglm/simd/arm.h
|
|
||||||
|
|
||||||
cglm_simd_sse2dir=$(includedir)/cglm/simd/sse2
|
cglm_simd_sse2dir=$(includedir)/cglm/simd/sse2
|
||||||
cglm_simd_sse2_HEADERS = include/cglm/simd/sse2/affine.h \
|
cglm_simd_sse2_HEADERS = include/cglm/simd/sse2/affine.h \
|
||||||
@@ -113,9 +107,7 @@ libcglm_la_SOURCES=\
|
|||||||
src/box.c \
|
src/box.c \
|
||||||
src/project.c \
|
src/project.c \
|
||||||
src/sphere.c \
|
src/sphere.c \
|
||||||
src/ease.c \
|
src/ease.c
|
||||||
src/curve.c \
|
|
||||||
src/bezier.c
|
|
||||||
|
|
||||||
test_tests_SOURCES=\
|
test_tests_SOURCES=\
|
||||||
test/src/test_common.c \
|
test/src/test_common.c \
|
||||||
@@ -129,8 +121,7 @@ test_tests_SOURCES=\
|
|||||||
test/src/test_vec4.c \
|
test/src/test_vec4.c \
|
||||||
test/src/test_vec3.c \
|
test/src/test_vec3.c \
|
||||||
test/src/test_mat3.c \
|
test/src/test_mat3.c \
|
||||||
test/src/test_affine.c \
|
test/src/test_affine.c
|
||||||
test/src/test_bezier.c
|
|
||||||
|
|
||||||
all-local:
|
all-local:
|
||||||
sh ./post-build.sh
|
sh ./post-build.sh
|
||||||
|
|||||||
@@ -8,17 +8,12 @@
|
|||||||
|
|
||||||
cd $(dirname "$0")
|
cd $(dirname "$0")
|
||||||
|
|
||||||
mkdir -p "$(pwd)/.libs"
|
mkdir -p .libs
|
||||||
|
|
||||||
libmocka_folder=$(pwd)/test/lib/cmocka/build/src/
|
|
||||||
|
|
||||||
if [ "$(uname)" = "Darwin" ]; then
|
if [ "$(uname)" = "Darwin" ]; then
|
||||||
libcmocka=libcmocka.0.dylib
|
ln -sf $(pwd)/test/lib/cmocka/build/src/libcmocka.0.dylib \
|
||||||
|
.libs/libcmocka.0.dylib;
|
||||||
else
|
else
|
||||||
libcmocka=libcmocka.so.0
|
ln -sf $(pwd)/test/lib/cmocka/build/src/libcmocka.so.0 \
|
||||||
fi
|
.libs/libcmocka.so.0;
|
||||||
|
|
||||||
libcmocka_path="$libmocka_folder$libcmocka"
|
|
||||||
if [ -f "$libcmocka_path" ]; then
|
|
||||||
ln -sf "$libcmocka_path" "$(pwd)/.libs/$libcmocka";
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
38
src/affine.c
38
src/affine.c
@@ -10,19 +10,19 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_translate_make(mat4 m, const vec3 v) {
|
glmc_translate_make(mat4 m, vec3 v) {
|
||||||
glm_translate_make(m, v);
|
glm_translate_make(m, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_translate_to(const mat4 m, const vec3 v, mat4 dest) {
|
glmc_translate_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
glm_translate_to(m, v, dest);
|
glm_translate_to(m, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_translate(mat4 m, const vec3 v) {
|
glmc_translate(mat4 m, vec3 v) {
|
||||||
glm_translate(m, v);
|
glm_translate(m, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,19 +46,19 @@ glmc_translate_z(mat4 m, float to) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_scale_make(mat4 m, const vec3 v) {
|
glmc_scale_make(mat4 m, vec3 v) {
|
||||||
glm_scale_make(m, v);
|
glm_scale_make(m, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_scale_to(const mat4 m, const vec3 v, mat4 dest) {
|
glmc_scale_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
glm_scale_to(m, v, dest);
|
glm_scale_to(m, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_scale(mat4 m, const vec3 v) {
|
glmc_scale(mat4 m, vec3 v) {
|
||||||
glm_scale(m, v);
|
glm_scale(m, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,79 +70,79 @@ glmc_scale_uni(mat4 m, float s) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_x(const mat4 m, float rad, mat4 dest) {
|
glmc_rotate_x(mat4 m, float rad, mat4 dest) {
|
||||||
glm_rotate_x(m, rad, dest);
|
glm_rotate_x(m, rad, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_y(const mat4 m, float rad, mat4 dest) {
|
glmc_rotate_y(mat4 m, float rad, mat4 dest) {
|
||||||
glm_rotate_y(m, rad, dest);
|
glm_rotate_y(m, rad, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_z(const mat4 m, float rad, mat4 dest) {
|
glmc_rotate_z(mat4 m, float rad, mat4 dest) {
|
||||||
glm_rotate_z(m, rad, dest);
|
glm_rotate_z(m, rad, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_make(mat4 m, float angle, const vec3 axis) {
|
glmc_rotate_make(mat4 m, float angle, vec3 axis) {
|
||||||
glm_rotate_make(m, angle, axis);
|
glm_rotate_make(m, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate(mat4 m, float angle, const vec3 axis) {
|
glmc_rotate(mat4 m, float angle, vec3 axis) {
|
||||||
glm_rotate(m, angle, axis);
|
glm_rotate(m, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) {
|
glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
glm_rotate_at(m, pivot, angle, axis);
|
glm_rotate_at(m, pivot, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) {
|
glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
glm_rotate_atm(m, pivot, angle, axis);
|
glm_rotate_atm(m, pivot, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose_scalev(const mat4 m, vec3 s) {
|
glmc_decompose_scalev(mat4 m, vec3 s) {
|
||||||
glm_decompose_scalev(m, s);
|
glm_decompose_scalev(m, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_uniscaled(const mat4 m) {
|
glmc_uniscaled(mat4 m) {
|
||||||
return glm_uniscaled(m);
|
return glm_uniscaled(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose_rs(const mat4 m, mat4 r, vec3 s) {
|
glmc_decompose_rs(mat4 m, mat4 r, vec3 s) {
|
||||||
glm_decompose_rs(m, r, s);
|
glm_decompose_rs(m, r, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose(const mat4 m, vec4 t, mat4 r, vec3 s) {
|
glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s) {
|
||||||
glm_decompose(m, t, r, s);
|
glm_decompose(m, t, r, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mul(const mat4 m1, const mat4 m2, mat4 dest) {
|
glmc_mul(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
glm_mul(m1, m2, dest);
|
glm_mul(m1, m2, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mul_rot(const mat4 m1, const mat4 m2, mat4 dest) {
|
glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
glm_mul_rot(m1, m2, dest);
|
glm_mul_rot(m1, m2, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
27
src/bezier.c
27
src/bezier.c
@@ -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);
|
|
||||||
}
|
|
||||||
32
src/box.c
32
src/box.c
@@ -10,34 +10,34 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) {
|
glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) {
|
||||||
glm_aabb_transform(box, m, dest);
|
glm_aabb_transform(box, m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) {
|
glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) {
|
||||||
glm_aabb_merge(box1, box2, dest);
|
glm_aabb_merge(box1, box2, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) {
|
glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) {
|
||||||
glm_aabb_crop(box, cropBox, dest);
|
glm_aabb_crop(box, cropBox, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_crop_until(const vec3 box[2],
|
glmc_aabb_crop_until(vec3 box[2],
|
||||||
const vec3 cropBox[2],
|
vec3 cropBox[2],
|
||||||
const vec3 clampBox[2],
|
vec3 clampBox[2],
|
||||||
vec3 dest[2]) {
|
vec3 dest[2]) {
|
||||||
glm_aabb_crop_until(box, cropBox, clampBox, dest);
|
glm_aabb_crop_until(box, cropBox, clampBox, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_frustum(const vec3 box[2], vec4 planes[6]) {
|
glmc_aabb_frustum(vec3 box[2], vec4 planes[6]) {
|
||||||
return glm_aabb_frustum(box, planes);
|
return glm_aabb_frustum(box, planes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,48 +49,48 @@ glmc_aabb_invalidate(vec3 box[2]) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_isvalid(const vec3 box[2]) {
|
glmc_aabb_isvalid(vec3 box[2]) {
|
||||||
return glm_aabb_isvalid(box);
|
return glm_aabb_isvalid(box);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_aabb_size(const vec3 box[2]) {
|
glmc_aabb_size(vec3 box[2]) {
|
||||||
return glm_aabb_size(box);
|
return glm_aabb_size(box);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_aabb_radius(const vec3 box[2]) {
|
glmc_aabb_radius(vec3 box[2]) {
|
||||||
return glm_aabb_radius(box);
|
return glm_aabb_radius(box);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb_center(const vec3 box[2], vec3 dest) {
|
glmc_aabb_center(vec3 box[2], vec3 dest) {
|
||||||
glm_aabb_center(box, dest);
|
glm_aabb_center(box, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_aabb(const vec3 box[2], const vec3 other[2]) {
|
glmc_aabb_aabb(vec3 box[2], vec3 other[2]) {
|
||||||
return glm_aabb_aabb(box, other);
|
return glm_aabb_aabb(box, other);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_point(const vec3 box[2], const vec3 point) {
|
glmc_aabb_point(vec3 box[2], vec3 point) {
|
||||||
return glm_aabb_point(box, point);
|
return glm_aabb_point(box, point);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_contains(const vec3 box[2], const vec3 other[2]) {
|
glmc_aabb_contains(vec3 box[2], vec3 other[2]) {
|
||||||
return glm_aabb_contains(box, other);
|
return glm_aabb_contains(box, other);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_aabb_sphere(const vec3 box[2], const vec4 s) {
|
glmc_aabb_sphere(vec3 box[2], vec4 s) {
|
||||||
return glm_aabb_sphere(box, s);
|
return glm_aabb_sphere(box, s);
|
||||||
}
|
}
|
||||||
|
|||||||
44
src/cam.c
44
src/cam.c
@@ -16,7 +16,7 @@ glmc_frustum(float left,
|
|||||||
float top,
|
float top,
|
||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
glm_frustum(left,
|
glm_frustum(left,
|
||||||
right,
|
right,
|
||||||
bottom,
|
bottom,
|
||||||
@@ -34,7 +34,7 @@ glmc_ortho(float left,
|
|||||||
float top,
|
float top,
|
||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
glm_ortho(left,
|
glm_ortho(left,
|
||||||
right,
|
right,
|
||||||
bottom,
|
bottom,
|
||||||
@@ -46,19 +46,19 @@ glmc_ortho(float left,
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho_aabb(const vec3 box[2], mat4 dest) {
|
glmc_ortho_aabb(vec3 box[2], mat4 dest) {
|
||||||
glm_ortho_aabb(box, dest);
|
glm_ortho_aabb(box, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) {
|
glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) {
|
||||||
glm_ortho_aabb_p(box, padding, dest);
|
glm_ortho_aabb_p(box, padding, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest) {
|
glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) {
|
||||||
glm_ortho_aabb_pz(box, padding, dest);
|
glm_ortho_aabb_pz(box, padding, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ glmc_perspective(float fovy,
|
|||||||
float aspect,
|
float aspect,
|
||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
glm_perspective(fovy,
|
glm_perspective(fovy,
|
||||||
aspect,
|
aspect,
|
||||||
nearVal,
|
nearVal,
|
||||||
@@ -108,28 +108,28 @@ glmc_perspective_resize(float aspect, mat4 proj) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_lookat(const vec3 eye,
|
glmc_lookat(vec3 eye,
|
||||||
const vec3 center,
|
vec3 center,
|
||||||
const vec3 up,
|
vec3 up,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
glm_lookat(eye, center, up, dest);
|
glm_lookat(eye, center, up, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) {
|
glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
glm_look(eye, dir, up, dest);
|
glm_look(eye, dir, up, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) {
|
glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
glm_look_anyup(eye, dir, dest);
|
glm_look_anyup(eye, dir, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp(const mat4 proj,
|
glmc_persp_decomp(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearVal,
|
||||||
float * __restrict farVal,
|
float * __restrict farVal,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
@@ -141,13 +141,13 @@ glmc_persp_decomp(const mat4 proj,
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decompv(const mat4 proj, float dest[6]) {
|
glmc_persp_decompv(mat4 proj, float dest[6]) {
|
||||||
glm_persp_decompv(proj, dest);
|
glm_persp_decompv(proj, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_x(const mat4 proj,
|
glmc_persp_decomp_x(mat4 proj,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
float * __restrict right) {
|
float * __restrict right) {
|
||||||
glm_persp_decomp_x(proj, left, right);
|
glm_persp_decomp_x(proj, left, right);
|
||||||
@@ -155,7 +155,7 @@ glmc_persp_decomp_x(const mat4 proj,
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_y(const mat4 proj,
|
glmc_persp_decomp_y(mat4 proj,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom) {
|
float * __restrict bottom) {
|
||||||
glm_persp_decomp_y(proj, top, bottom);
|
glm_persp_decomp_y(proj, top, bottom);
|
||||||
@@ -163,7 +163,7 @@ glmc_persp_decomp_y(const mat4 proj,
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_z(const mat4 proj,
|
glmc_persp_decomp_z(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearVal,
|
||||||
float * __restrict farVal) {
|
float * __restrict farVal) {
|
||||||
glm_persp_decomp_z(proj, nearVal, farVal);
|
glm_persp_decomp_z(proj, nearVal, farVal);
|
||||||
@@ -171,30 +171,30 @@ glmc_persp_decomp_z(const mat4 proj,
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_far(const mat4 proj, float * __restrict farVal) {
|
glmc_persp_decomp_far(mat4 proj, float * __restrict farVal) {
|
||||||
glm_persp_decomp_far(proj, farVal);
|
glm_persp_decomp_far(proj, farVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_near(const mat4 proj, float * __restrict nearVal) {
|
glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal) {
|
||||||
glm_persp_decomp_near(proj, nearVal);
|
glm_persp_decomp_near(proj, nearVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_persp_fovy(const mat4 proj) {
|
glmc_persp_fovy(mat4 proj) {
|
||||||
return glm_persp_fovy(proj);
|
return glm_persp_fovy(proj);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_persp_aspect(const mat4 proj) {
|
glmc_persp_aspect(mat4 proj) {
|
||||||
return glm_persp_aspect(proj);
|
return glm_persp_aspect(proj);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_sizes(const mat4 proj, float fovy, vec4 dest) {
|
glmc_persp_sizes(mat4 proj, float fovy, vec4 dest) {
|
||||||
glm_persp_sizes(proj, fovy, dest);
|
glm_persp_sizes(proj, fovy, dest);
|
||||||
}
|
}
|
||||||
|
|||||||
15
src/curve.c
15
src/curve.c
@@ -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, const mat4 m, const vec4 c) {
|
|
||||||
return glm_smc(s, m, c);
|
|
||||||
}
|
|
||||||
18
src/euler.c
18
src/euler.c
@@ -10,54 +10,54 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_angles(const mat4 m, vec3 dest) {
|
glmc_euler_angles(mat4 m, vec3 dest) {
|
||||||
glm_euler_angles(m, dest);
|
glm_euler_angles(m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler(const vec3 angles, mat4 dest) {
|
glmc_euler(vec3 angles, mat4 dest) {
|
||||||
glm_euler(angles, dest);
|
glm_euler(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_xyz(const vec3 angles, mat4 dest) {
|
glmc_euler_xyz(vec3 angles, mat4 dest) {
|
||||||
glm_euler_xyz(angles, dest);
|
glm_euler_xyz(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_zyx(const vec3 angles, mat4 dest) {
|
glmc_euler_zyx(vec3 angles, mat4 dest) {
|
||||||
glm_euler_zyx(angles, dest);
|
glm_euler_zyx(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_zxy(const vec3 angles, mat4 dest) {
|
glmc_euler_zxy(vec3 angles, mat4 dest) {
|
||||||
glm_euler_zxy(angles, dest);
|
glm_euler_zxy(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_xzy(const vec3 angles, mat4 dest) {
|
glmc_euler_xzy(vec3 angles, mat4 dest) {
|
||||||
glm_euler_xzy(angles, dest);
|
glm_euler_xzy(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_yzx(const vec3 angles, mat4 dest) {
|
glmc_euler_yzx(vec3 angles, mat4 dest) {
|
||||||
glm_euler_yzx(angles, dest);
|
glm_euler_yzx(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_yxz(const vec3 angles, mat4 dest) {
|
glmc_euler_yxz(vec3 angles, mat4 dest) {
|
||||||
glm_euler_yxz(angles, dest);
|
glm_euler_yxz(angles, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_euler_by_order(const vec3 angles, glm_euler_sq axis, mat4 dest) {
|
glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest) {
|
||||||
glm_euler_by_order(angles, axis, dest);
|
glm_euler_by_order(angles, axis, dest);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,33 +10,33 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_planes(const mat4 m, vec4 dest[6]) {
|
glmc_frustum_planes(mat4 m, vec4 dest[6]) {
|
||||||
glm_frustum_planes(m, dest);
|
glm_frustum_planes(m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_corners(const mat4 invMat, vec4 dest[8]) {
|
glmc_frustum_corners(mat4 invMat, vec4 dest[8]) {
|
||||||
glm_frustum_corners(invMat, dest);
|
glm_frustum_corners(invMat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_center(const vec4 corners[8], vec4 dest) {
|
glmc_frustum_center(vec4 corners[8], vec4 dest) {
|
||||||
glm_frustum_center(corners, dest);
|
glm_frustum_center(corners, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) {
|
glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) {
|
||||||
glm_frustum_box(corners, m, box);
|
glm_frustum_box(corners, m, box);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum_corners_at(const vec4 corners[8],
|
glmc_frustum_corners_at(vec4 corners[8],
|
||||||
float splitDist,
|
float splitDist,
|
||||||
float farDist,
|
float farDist,
|
||||||
vec4 planeCorners[4]) {
|
vec4 planeCorners[4]) {
|
||||||
glm_frustum_corners_at(corners, splitDist, farDist, planeCorners);
|
glm_frustum_corners_at(corners, splitDist, farDist, planeCorners);
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/io.c
20
src/io.c
@@ -10,35 +10,35 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_print(const mat4 matrix,
|
glmc_mat4_print(mat4 matrix,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
glm_mat4_print(matrix, ostream);
|
glm_mat4_print(matrix, ostream);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_print(const mat3 matrix,
|
glmc_mat3_print(mat3 matrix,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
glm_mat3_print(matrix, ostream);
|
glm_mat3_print(matrix, ostream);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_print(const vec4 vec,
|
glmc_vec4_print(vec4 vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
glm_vec4_print(vec, ostream);
|
glm_vec4_print(vec, ostream);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_print(const vec3 vec,
|
glmc_vec3_print(vec3 vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
glm_vec3_print(vec, ostream);
|
glm_vec3_print(vec, ostream);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_versor_print(const versor vec,
|
glmc_versor_print(versor vec,
|
||||||
FILE * const __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
glm_versor_print(vec, ostream);
|
glm_versor_print(vec, ostream);
|
||||||
}
|
}
|
||||||
|
|||||||
24
src/mat3.c
24
src/mat3.c
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_copy(const mat3 mat, mat3 dest) {
|
glmc_mat3_copy(mat3 mat, mat3 dest) {
|
||||||
glm_mat3_copy(mat, dest);
|
glm_mat3_copy(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,19 +22,19 @@ glmc_mat3_identity(mat3 mat) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_identity_array(mat3 * const __restrict mat, size_t count) {
|
glmc_mat3_identity_array(mat3 * __restrict mat, size_t count) {
|
||||||
glm_mat3_identity_array(mat, count);
|
glm_mat3_identity_array(mat, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) {
|
glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest) {
|
||||||
glm_mat3_mul(m1, m2, dest);
|
glm_mat3_mul(m1, m2, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_transpose_to(const mat3 m, mat3 dest) {
|
glmc_mat3_transpose_to(mat3 m, mat3 dest) {
|
||||||
glm_mat3_transpose_to(m, dest);
|
glm_mat3_transpose_to(m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,19 +46,19 @@ glmc_mat3_transpose(mat3 m) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) {
|
glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest) {
|
||||||
glm_mat3_mulv(m, v, dest);
|
glm_mat3_mulv(m, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat3_trace(const mat3 m) {
|
glmc_mat3_trace(mat3 m) {
|
||||||
return glm_mat3_trace(m);
|
return glm_mat3_trace(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_quat(const mat3 m, versor dest) {
|
glmc_mat3_quat(mat3 m, versor dest) {
|
||||||
glm_mat3_quat(m, dest);
|
glm_mat3_quat(m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,13 +70,13 @@ glmc_mat3_scale(mat3 m, float s) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat3_det(const mat3 mat) {
|
glmc_mat3_det(mat3 mat) {
|
||||||
return glm_mat3_det(mat);
|
return glm_mat3_det(mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_inv(const mat3 mat, mat3 dest) {
|
glmc_mat3_inv(mat3 mat, mat3 dest) {
|
||||||
glm_mat3_inv(mat, dest);
|
glm_mat3_inv(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,9 +91,3 @@ void
|
|||||||
glmc_mat3_swap_row(mat3 mat, int row1, int row2) {
|
glmc_mat3_swap_row(mat3 mat, int row1, int row2) {
|
||||||
glm_mat3_swap_row(mat, row1, row2);
|
glm_mat3_swap_row(mat, row1, row2);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
float
|
|
||||||
glmc_mat3_rmc(const vec3 r, const mat3 m, const vec3 c) {
|
|
||||||
return glm_mat3_rmc(r, m, c);
|
|
||||||
}
|
|
||||||
|
|||||||
42
src/mat4.c
42
src/mat4.c
@@ -10,13 +10,13 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_ucopy(const mat4 mat, mat4 dest) {
|
glmc_mat4_ucopy(mat4 mat, mat4 dest) {
|
||||||
glm_mat4_copy(mat, dest);
|
glm_mat4_copy(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_copy(const mat4 mat, mat4 dest) {
|
glmc_mat4_copy(mat4 mat, mat4 dest) {
|
||||||
glm_mat4_copy(mat, dest);
|
glm_mat4_copy(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,73 +28,73 @@ glmc_mat4_identity(mat4 mat) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_identity_array(mat4 * const __restrict mat, size_t count) {
|
glmc_mat4_identity_array(mat4 * __restrict mat, size_t count) {
|
||||||
glm_mat4_identity_array(mat, count);
|
glm_mat4_identity_array(mat, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_pick3(const mat4 mat, mat3 dest) {
|
glmc_mat4_pick3(mat4 mat, mat3 dest) {
|
||||||
glm_mat4_pick3(mat, dest);
|
glm_mat4_pick3(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_pick3t(const mat4 mat, mat3 dest) {
|
glmc_mat4_pick3t(mat4 mat, mat3 dest) {
|
||||||
glm_mat4_pick3t(mat, dest);
|
glm_mat4_pick3t(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_ins3(const mat3 mat, mat4 dest) {
|
glmc_mat4_ins3(mat3 mat, mat4 dest) {
|
||||||
glm_mat4_ins3(mat, dest);
|
glm_mat4_ins3(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) {
|
glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest) {
|
||||||
glm_mat4_mul(m1, m2, dest);
|
glm_mat4_mul(m1, m2, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) {
|
glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) {
|
||||||
glm_mat4_mulN(matrices, len, dest);
|
glm_mat4_mulN(matrices, len, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) {
|
glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest) {
|
||||||
glm_mat4_mulv(m, v, dest);
|
glm_mat4_mulv(m, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) {
|
glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) {
|
||||||
glm_mat4_mulv3(m, v, last, dest);
|
glm_mat4_mulv3(m, v, last, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat4_trace(const mat4 m) {
|
glmc_mat4_trace(mat4 m) {
|
||||||
return glm_mat4_trace(m);
|
return glm_mat4_trace(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat4_trace3(const mat4 m) {
|
glmc_mat4_trace3(mat4 m) {
|
||||||
return glm_mat4_trace3(m);
|
return glm_mat4_trace3(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_quat(const mat4 m, versor dest) {
|
glmc_mat4_quat(mat4 m, versor dest) {
|
||||||
glm_mat4_quat(m, dest);
|
glm_mat4_quat(m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_transpose_to(const mat4 m, mat4 dest) {
|
glmc_mat4_transpose_to(mat4 m, mat4 dest) {
|
||||||
glm_mat4_transpose_to(m, dest);
|
glm_mat4_transpose_to(m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,25 +118,25 @@ glmc_mat4_scale(mat4 m, float s) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_mat4_det(const mat4 mat) {
|
glmc_mat4_det(mat4 mat) {
|
||||||
return glm_mat4_det(mat);
|
return glm_mat4_det(mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_inv(const mat4 mat, mat4 dest) {
|
glmc_mat4_inv(mat4 mat, mat4 dest) {
|
||||||
glm_mat4_inv(mat, dest);
|
glm_mat4_inv(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_inv_precise(const mat4 mat, mat4 dest) {
|
glmc_mat4_inv_precise(mat4 mat, mat4 dest) {
|
||||||
glm_mat4_inv_precise(mat, dest);
|
glm_mat4_inv_precise(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_inv_fast(const mat4 mat, mat4 dest) {
|
glmc_mat4_inv_fast(mat4 mat, mat4 dest) {
|
||||||
glm_mat4_inv_fast(mat, dest);
|
glm_mat4_inv_fast(mat, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,9 +151,3 @@ void
|
|||||||
glmc_mat4_swap_row(mat4 mat, int row1, int row2) {
|
glmc_mat4_swap_row(mat4 mat, int row1, int row2) {
|
||||||
glm_mat4_swap_row(mat, row1, row2);
|
glm_mat4_swap_row(mat, row1, row2);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
float
|
|
||||||
glmc_mat4_rmc(const vec4 r, const mat4 m, const vec4 c) {
|
|
||||||
return glm_mat4_rmc(r, m, c);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -10,18 +10,18 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) {
|
glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) {
|
||||||
glm_unprojecti(pos, invMat, vp, dest);
|
glm_unprojecti(pos, invMat, vp, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) {
|
glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
||||||
glm_unproject(pos, m, vp, dest);
|
glm_unproject(pos, m, vp, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) {
|
glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
||||||
glm_project(pos, m, vp, dest);
|
glm_project(pos, m, vp, dest);
|
||||||
}
|
}
|
||||||
|
|||||||
64
src/quat.c
64
src/quat.c
@@ -16,7 +16,7 @@ glmc_quat_identity(versor q) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_identity_array(versor * const __restrict q, size_t count) {
|
glmc_quat_identity_array(versor * __restrict q, size_t count) {
|
||||||
glm_quat_identity_array(q, count);
|
glm_quat_identity_array(q, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,25 +34,25 @@ glmc_quat(versor q, float angle, float x, float y, float z) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quatv(versor q, float angle, const vec3 axis) {
|
glmc_quatv(versor q, float angle, vec3 axis) {
|
||||||
glm_quatv(q, angle, axis);
|
glm_quatv(q, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_copy(const versor q, versor dest) {
|
glmc_quat_copy(versor q, versor dest) {
|
||||||
glm_quat_copy(q, dest);
|
glm_quat_copy(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_norm(const versor q) {
|
glmc_quat_norm(versor q) {
|
||||||
return glm_quat_norm(q);
|
return glm_quat_norm(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_normalize_to(const versor q, versor dest) {
|
glmc_quat_normalize_to(versor q, versor dest) {
|
||||||
glm_quat_normalize_to(q, dest);
|
glm_quat_normalize_to(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,154 +64,150 @@ glmc_quat_normalize(versor q) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_dot(const versor p, const versor q) {
|
glmc_quat_dot(versor p, versor q) {
|
||||||
return glm_quat_dot(p, q);
|
return glm_quat_dot(p, q);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_conjugate(const versor q, versor dest) {
|
glmc_quat_conjugate(versor q, versor dest) {
|
||||||
glm_quat_conjugate(q, dest);
|
glm_quat_conjugate(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_inv(const versor q, versor dest) {
|
glmc_quat_inv(versor q, versor dest) {
|
||||||
glm_quat_inv(q, dest);
|
glm_quat_inv(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_add(const versor p, const versor q, versor dest) {
|
glmc_quat_add(versor p, versor q, versor dest) {
|
||||||
glm_quat_add(p, q, dest);
|
glm_quat_add(p, q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_sub(const versor p, const versor q, versor dest) {
|
glmc_quat_sub(versor p, versor q, versor dest) {
|
||||||
glm_quat_sub(p, q, dest);
|
glm_quat_sub(p, q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_real(const versor q) {
|
glmc_quat_real(versor q) {
|
||||||
return glm_quat_real(q);
|
return glm_quat_real(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_imag(const versor q, vec3 dest) {
|
glmc_quat_imag(versor q, vec3 dest) {
|
||||||
glm_quat_imag(q, dest);
|
glm_quat_imag(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_imagn(const versor q, vec3 dest) {
|
glmc_quat_imagn(versor q, vec3 dest) {
|
||||||
glm_quat_imagn(q, dest);
|
glm_quat_imagn(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_imaglen(const versor q) {
|
glmc_quat_imaglen(versor q) {
|
||||||
return glm_quat_imaglen(q);
|
return glm_quat_imaglen(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_quat_angle(const versor q) {
|
glmc_quat_angle(versor q) {
|
||||||
return glm_quat_angle(q);
|
return glm_quat_angle(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_axis(const versor q, versor dest) {
|
glmc_quat_axis(versor q, versor dest) {
|
||||||
glm_quat_axis(q, dest);
|
glm_quat_axis(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mul(const versor p, const versor q, versor dest) {
|
glmc_quat_mul(versor p, versor q, versor dest) {
|
||||||
glm_quat_mul(p, q, dest);
|
glm_quat_mul(p, q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat4(const versor q, mat4 dest) {
|
glmc_quat_mat4(versor q, mat4 dest) {
|
||||||
glm_quat_mat4(q, dest);
|
glm_quat_mat4(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat4t(const versor q, mat4 dest) {
|
glmc_quat_mat4t(versor q, mat4 dest) {
|
||||||
glm_quat_mat4t(q, dest);
|
glm_quat_mat4t(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat3(const versor q, mat3 dest) {
|
glmc_quat_mat3(versor q, mat3 dest) {
|
||||||
glm_quat_mat3(q, dest);
|
glm_quat_mat3(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_mat3t(const versor q, mat3 dest) {
|
glmc_quat_mat3t(versor q, mat3 dest) {
|
||||||
glm_quat_mat3t(q, dest);
|
glm_quat_mat3t(q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_lerp(const versor from, const versor to, float t, versor dest) {
|
glmc_quat_lerp(versor from, versor to, float t, versor dest) {
|
||||||
glm_quat_lerp(from, to, t, dest);
|
glm_quat_lerp(from, to, t, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_slerp(const versor from, const versor to, float t, versor dest) {
|
glmc_quat_slerp(versor from, versor to, float t, versor dest) {
|
||||||
glm_quat_slerp(from, to, t, dest);
|
glm_quat_slerp(from, to, t, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_look(const vec3 eye, const versor ori, mat4 dest) {
|
glmc_quat_look(vec3 eye, versor ori, mat4 dest) {
|
||||||
glm_quat_look(eye, ori, dest);
|
glm_quat_look(eye, ori, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) {
|
glmc_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) {
|
||||||
glm_quat_for(dir, fwd, up, dest);
|
glm_quat_for(dir, fwd, up, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_forp(const vec3 from,
|
glmc_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) {
|
||||||
const vec3 to,
|
|
||||||
const vec3 fwd,
|
|
||||||
const vec3 up,
|
|
||||||
versor dest) {
|
|
||||||
glm_quat_forp(from, to, fwd, up, dest);
|
glm_quat_forp(from, to, fwd, up, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotatev(const versor q, const vec3 v, vec3 dest) {
|
glmc_quat_rotatev(versor q, vec3 v, vec3 dest) {
|
||||||
glm_quat_rotatev(q, v, dest);
|
glm_quat_rotatev(q, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotate(const mat4 m, const versor q, mat4 dest) {
|
glmc_quat_rotate(mat4 m, versor q, mat4 dest) {
|
||||||
glm_quat_rotate(m, q, dest);
|
glm_quat_rotate(m, q, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotate_at(mat4 model, const versor q, const vec3 pivot) {
|
glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot) {
|
||||||
glm_quat_rotate_at(model, q, pivot);
|
glm_quat_rotate_at(model, q, pivot);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot) {
|
glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot) {
|
||||||
glm_quat_rotate_atm(m, q, pivot);
|
glm_quat_rotate_atm(m, q, pivot);
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/sphere.c
10
src/sphere.c
@@ -10,30 +10,30 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_sphere_radii(const vec4 s) {
|
glmc_sphere_radii(vec4 s) {
|
||||||
return glm_sphere_radii(s);
|
return glm_sphere_radii(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_sphere_transform(const vec4 s, const mat4 m, vec4 dest) {
|
glmc_sphere_transform(vec4 s, mat4 m, vec4 dest) {
|
||||||
glm_sphere_transform(s, m, dest);
|
glm_sphere_transform(s, m, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) {
|
glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest) {
|
||||||
glm_sphere_merge(s1, s2, dest);
|
glm_sphere_merge(s1, s2, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_sphere_sphere(const vec4 s1, const vec4 s2) {
|
glmc_sphere_sphere(vec4 s1, vec4 s2) {
|
||||||
return glm_sphere_sphere(s1, s2);
|
return glm_sphere_sphere(s1, s2);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_sphere_point(const vec4 s, const vec3 point) {
|
glmc_sphere_point(vec4 s, vec3 point) {
|
||||||
return glm_sphere_point(s, point);
|
return glm_sphere_point(s, point);
|
||||||
}
|
}
|
||||||
|
|||||||
98
src/vec3.c
98
src/vec3.c
@@ -10,13 +10,13 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3(const vec4 v4, vec3 dest) {
|
glmc_vec3(vec4 v4, vec3 dest) {
|
||||||
glm_vec3(v4, dest);
|
glm_vec3(v4, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_copy(const vec3 a, vec3 dest) {
|
glmc_vec3_copy(vec3 a, vec3 dest) {
|
||||||
glm_vec3_copy(a, dest);
|
glm_vec3_copy(a, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,31 +34,31 @@ glmc_vec3_one(vec3 v) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_dot(const vec3 a, const vec3 b) {
|
glmc_vec3_dot(vec3 a, vec3 b) {
|
||||||
return glm_vec3_dot(a, b);
|
return glm_vec3_dot(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_cross(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_cross(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_cross(a, b, dest);
|
glm_vec3_cross(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_crossn(a, b, dest);
|
glm_vec3_crossn(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_norm(const vec3 v) {
|
glmc_vec3_norm(vec3 v) {
|
||||||
return glm_vec3_norm(v);
|
return glm_vec3_norm(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_normalize_to(const vec3 v, vec3 dest) {
|
glmc_vec3_normalize_to(vec3 v, vec3 dest) {
|
||||||
glm_vec3_normalize_to(v, dest);
|
glm_vec3_normalize_to(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,97 +70,97 @@ glmc_vec3_normalize(vec3 v) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_norm2(const vec3 v) {
|
glmc_vec3_norm2(vec3 v) {
|
||||||
return glm_vec3_norm2(v);
|
return glm_vec3_norm2(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_add(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_add(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_add(a, b, dest);
|
glm_vec3_add(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_adds(const vec3 v, float s, vec3 dest) {
|
glmc_vec3_adds(vec3 v, float s, vec3 dest) {
|
||||||
glm_vec3_adds(v, s, dest);
|
glm_vec3_adds(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_sub(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_sub(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_sub(a, b, dest);
|
glm_vec3_sub(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_subs(const vec3 v, float s, vec3 dest) {
|
glmc_vec3_subs(vec3 v, float s, vec3 dest) {
|
||||||
glm_vec3_subs(v, s, dest);
|
glm_vec3_subs(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_mul(const vec3 a, const vec3 b, vec3 d) {
|
glmc_vec3_mul(vec3 a, vec3 b, vec3 d) {
|
||||||
glm_vec3_mul(a, b, d);
|
glm_vec3_mul(a, b, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_scale(const vec3 v, float s, vec3 dest) {
|
glmc_vec3_scale(vec3 v, float s, vec3 dest) {
|
||||||
glm_vec3_scale(v, s, dest);
|
glm_vec3_scale(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_scale_as(const vec3 v, float s, vec3 dest) {
|
glmc_vec3_scale_as(vec3 v, float s, vec3 dest) {
|
||||||
glm_vec3_scale_as(v, s, dest);
|
glm_vec3_scale_as(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_div(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_div(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_div(a, b, dest);
|
glm_vec3_div(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_divs(const vec3 a, float s, vec3 dest) {
|
glmc_vec3_divs(vec3 a, float s, vec3 dest) {
|
||||||
glm_vec3_divs(a, s, dest);
|
glm_vec3_divs(a, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_addadd(a, b, dest);
|
glm_vec3_addadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_subadd(a, b, dest);
|
glm_vec3_subadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_muladd(a, b, dest);
|
glm_vec3_muladd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_muladds(const vec3 a, float s, vec3 dest) {
|
glmc_vec3_muladds(vec3 a, float s, vec3 dest) {
|
||||||
glm_vec3_muladds(a, s, dest);
|
glm_vec3_muladds(a, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_maxadd(a, b, dest);
|
glm_vec3_maxadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_minadd(a, b, dest);
|
glm_vec3_minadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,67 +172,67 @@ glmc_vec3_negate(vec3 v) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_negate_to(const vec3 v, vec3 dest) {
|
glmc_vec3_negate_to(vec3 v, vec3 dest) {
|
||||||
glm_vec3_negate_to(v, dest);
|
glm_vec3_negate_to(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_angle(const vec3 a, const vec3 b) {
|
glmc_vec3_angle(vec3 a, vec3 b) {
|
||||||
return glm_vec3_angle(a, b);
|
return glm_vec3_angle(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_rotate(vec3 v, float angle, const vec3 axis) {
|
glmc_vec3_rotate(vec3 v, float angle, vec3 axis) {
|
||||||
glm_vec3_rotate(v, angle, axis);
|
glm_vec3_rotate(v, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) {
|
glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) {
|
||||||
glm_vec3_rotate_m4(m, v, dest);
|
glm_vec3_rotate_m4(m, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) {
|
glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) {
|
||||||
glm_vec3_rotate_m3(m, v, dest);
|
glm_vec3_rotate_m3(m, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_proj(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_proj(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_proj(a, b, dest);
|
glm_vec3_proj(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_center(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_center(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_center(a, b, dest);
|
glm_vec3_center(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_distance2(const vec3 a, const vec3 b) {
|
glmc_vec3_distance2(vec3 a, vec3 b) {
|
||||||
return glm_vec3_distance2(a, b);
|
return glm_vec3_distance2(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_distance(const vec3 a, const vec3 b) {
|
glmc_vec3_distance(vec3 a, vec3 b) {
|
||||||
return glm_vec3_distance(a, b);
|
return glm_vec3_distance(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_minv(a, b, dest);
|
glm_vec3_minv(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_minv(const vec3 a, const vec3 b, vec3 dest) {
|
glmc_vec3_minv(vec3 a, vec3 b, vec3 dest) {
|
||||||
glm_vec3_maxv(a, b, dest);
|
glm_vec3_maxv(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,13 +244,13 @@ glmc_vec3_clamp(vec3 v, float minVal, float maxVal) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_ortho(const vec3 v, vec3 dest) {
|
glmc_vec3_ortho(vec3 v, vec3 dest) {
|
||||||
glm_vec3_ortho(v, dest);
|
glm_vec3_ortho(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) {
|
glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) {
|
||||||
glm_vec3_lerp(from, to, t, dest);
|
glm_vec3_lerp(from, to, t, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_mulv(const vec3 a, const vec3 b, vec3 d) {
|
glmc_vec3_mulv(vec3 a, vec3 b, vec3 d) {
|
||||||
glm_vec3_mulv(a, b, d);
|
glm_vec3_mulv(a, b, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,72 +270,72 @@ glmc_vec3_broadcast(float val, vec3 d) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eq(const vec3 v, float val) {
|
glmc_vec3_eq(vec3 v, float val) {
|
||||||
return glm_vec3_eq(v, val);
|
return glm_vec3_eq(v, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eq_eps(const vec3 v, float val) {
|
glmc_vec3_eq_eps(vec3 v, float val) {
|
||||||
return glm_vec3_eq_eps(v, val);
|
return glm_vec3_eq_eps(v, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eq_all(const vec3 v) {
|
glmc_vec3_eq_all(vec3 v) {
|
||||||
return glm_vec3_eq_all(v);
|
return glm_vec3_eq_all(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eqv(const vec3 a, const vec3 b) {
|
glmc_vec3_eqv(vec3 a, vec3 b) {
|
||||||
return glm_vec3_eqv(a, b);
|
return glm_vec3_eqv(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_eqv_eps(const vec3 a, const vec3 b) {
|
glmc_vec3_eqv_eps(vec3 a, vec3 b) {
|
||||||
return glm_vec3_eqv_eps(a, b);
|
return glm_vec3_eqv_eps(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_max(const vec3 v) {
|
glmc_vec3_max(vec3 v) {
|
||||||
return glm_vec3_max(v);
|
return glm_vec3_max(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec3_min(const vec3 v) {
|
glmc_vec3_min(vec3 v) {
|
||||||
return glm_vec3_min(v);
|
return glm_vec3_min(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_isnan(const vec3 v) {
|
glmc_vec3_isnan(vec3 v) {
|
||||||
return glm_vec3_isnan(v);
|
return glm_vec3_isnan(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_isinf(const vec3 v) {
|
glmc_vec3_isinf(vec3 v) {
|
||||||
return glm_vec3_isinf(v);
|
return glm_vec3_isinf(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec3_isvalid(const vec3 v) {
|
glmc_vec3_isvalid(vec3 v) {
|
||||||
return glm_vec3_isvalid(v);
|
return glm_vec3_isvalid(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_sign(const vec3 v, vec3 dest) {
|
glmc_vec3_sign(vec3 v, vec3 dest) {
|
||||||
glm_vec3_sign(v, dest);
|
glm_vec3_sign(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_sqrt(const vec3 v, vec3 dest) {
|
glmc_vec3_sqrt(vec3 v, vec3 dest) {
|
||||||
glm_vec3_sqrt(v, dest);
|
glm_vec3_sqrt(v, dest);
|
||||||
}
|
}
|
||||||
|
|||||||
88
src/vec4.c
88
src/vec4.c
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4(const vec3 v3, float last, vec4 dest) {
|
glmc_vec4(vec3 v3, float last, vec4 dest) {
|
||||||
glm_vec4(v3, last, dest);
|
glm_vec4(v3, last, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,37 +28,37 @@ glmc_vec4_one(vec4 v) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_copy3(const vec4 v, vec3 dest) {
|
glmc_vec4_copy3(vec4 v, vec3 dest) {
|
||||||
glm_vec4_copy3(v, dest);
|
glm_vec4_copy3(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_copy(const vec4 v, vec4 dest) {
|
glmc_vec4_copy(vec4 v, vec4 dest) {
|
||||||
glm_vec4_copy(v, dest);
|
glm_vec4_copy(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_ucopy(const vec4 v, vec4 dest) {
|
glmc_vec4_ucopy(vec4 v, vec4 dest) {
|
||||||
glm_vec4_ucopy(v, dest);
|
glm_vec4_ucopy(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_dot(const vec4 a, const vec4 b) {
|
glmc_vec4_dot(vec4 a, vec4 b) {
|
||||||
return glm_vec4_dot(a, b);
|
return glm_vec4_dot(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_norm(const vec4 v) {
|
glmc_vec4_norm(vec4 v) {
|
||||||
return glm_vec4_norm(v);
|
return glm_vec4_norm(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_normalize_to(const vec4 v, vec4 dest) {
|
glmc_vec4_normalize_to(vec4 v, vec4 dest) {
|
||||||
glm_vec4_normalize_to(v, dest);
|
glm_vec4_normalize_to(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,97 +70,97 @@ glmc_vec4_normalize(vec4 v) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_norm2(const vec4 v) {
|
glmc_vec4_norm2(vec4 v) {
|
||||||
return glm_vec4_norm2(v);
|
return glm_vec4_norm2(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_add(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_add(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_add(a, b, dest);
|
glm_vec4_add(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_adds(const vec4 v, float s, vec4 dest) {
|
glmc_vec4_adds(vec4 v, float s, vec4 dest) {
|
||||||
glm_vec4_adds(v, s, dest);
|
glm_vec4_adds(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_sub(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_sub(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_sub(a, b, dest);
|
glm_vec4_sub(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_subs(const vec4 v, float s, vec4 dest) {
|
glmc_vec4_subs(vec4 v, float s, vec4 dest) {
|
||||||
glm_vec4_subs(v, s, dest);
|
glm_vec4_subs(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_mul(const vec4 a, const vec4 b, vec4 d) {
|
glmc_vec4_mul(vec4 a, vec4 b, vec4 d) {
|
||||||
glm_vec4_mul(a, b, d);
|
glm_vec4_mul(a, b, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_scale(const vec4 v, float s, vec4 dest) {
|
glmc_vec4_scale(vec4 v, float s, vec4 dest) {
|
||||||
glm_vec4_scale(v, s, dest);
|
glm_vec4_scale(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_scale_as(const vec4 v, float s, vec4 dest) {
|
glmc_vec4_scale_as(vec4 v, float s, vec4 dest) {
|
||||||
glm_vec4_scale_as(v, s, dest);
|
glm_vec4_scale_as(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_div(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_div(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_div(a, b, dest);
|
glm_vec4_div(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_divs(const vec4 v, float s, vec4 dest) {
|
glmc_vec4_divs(vec4 v, float s, vec4 dest) {
|
||||||
glm_vec4_divs(v, s, dest);
|
glm_vec4_divs(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_addadd(a, b, dest);
|
glm_vec4_addadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_subadd(a, b, dest);
|
glm_vec4_subadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_muladd(a, b, dest);
|
glm_vec4_muladd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_muladds(const vec4 a, float s, vec4 dest) {
|
glmc_vec4_muladds(vec4 a, float s, vec4 dest) {
|
||||||
glm_vec4_muladds(a, s, dest);
|
glm_vec4_muladds(a, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_maxadd(a, b, dest);
|
glm_vec4_maxadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_minadd(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_minadd(a, b, dest);
|
glm_vec4_minadd(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,25 +172,25 @@ glmc_vec4_negate(vec4 v) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_negate_to(const vec4 v, vec4 dest) {
|
glmc_vec4_negate_to(vec4 v, vec4 dest) {
|
||||||
glm_vec4_negate_to(v, dest);
|
glm_vec4_negate_to(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_distance(const vec4 a, const vec4 b) {
|
glmc_vec4_distance(vec4 a, vec4 b) {
|
||||||
return glm_vec4_distance(a, b);
|
return glm_vec4_distance(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_minv(a, b, dest);
|
glm_vec4_minv(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_minv(const vec4 a, const vec4 b, vec4 dest) {
|
glmc_vec4_minv(vec4 a, vec4 b, vec4 dest) {
|
||||||
glm_vec4_maxv(a, b, dest);
|
glm_vec4_maxv(a, b, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,21 +202,15 @@ glmc_vec4_clamp(vec4 v, float minVal, float maxVal) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) {
|
glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) {
|
||||||
glm_vec4_lerp(from, to, t, dest);
|
glm_vec4_lerp(from, to, t, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
void
|
|
||||||
glmc_vec4_cubic(float s, vec4 dest) {
|
|
||||||
glm_vec4_cubic(s, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ext */
|
/* ext */
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_mulv(const vec4 a, const vec4 b, vec4 d) {
|
glmc_vec4_mulv(vec4 a, vec4 b, vec4 d) {
|
||||||
glm_vec4_mulv(a, b, d);
|
glm_vec4_mulv(a, b, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,72 +222,72 @@ glmc_vec4_broadcast(float val, vec4 d) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eq(const vec4 v, float val) {
|
glmc_vec4_eq(vec4 v, float val) {
|
||||||
return glm_vec4_eq(v, val);
|
return glm_vec4_eq(v, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eq_eps(const vec4 v, float val) {
|
glmc_vec4_eq_eps(vec4 v, float val) {
|
||||||
return glm_vec4_eq_eps(v, val);
|
return glm_vec4_eq_eps(v, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eq_all(const vec4 v) {
|
glmc_vec4_eq_all(vec4 v) {
|
||||||
return glm_vec4_eq_all(v);
|
return glm_vec4_eq_all(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eqv(const vec4 a, const vec4 b) {
|
glmc_vec4_eqv(vec4 a, vec4 b) {
|
||||||
return glm_vec4_eqv(a, b);
|
return glm_vec4_eqv(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_eqv_eps(const vec4 a, const vec4 b) {
|
glmc_vec4_eqv_eps(vec4 a, vec4 b) {
|
||||||
return glm_vec4_eqv_eps(a, b);
|
return glm_vec4_eqv_eps(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_max(const vec4 v) {
|
glmc_vec4_max(vec4 v) {
|
||||||
return glm_vec4_max(v);
|
return glm_vec4_max(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec4_min(const vec4 v) {
|
glmc_vec4_min(vec4 v) {
|
||||||
return glm_vec4_min(v);
|
return glm_vec4_min(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_isnan(const vec4 v) {
|
glmc_vec4_isnan(vec4 v) {
|
||||||
return glm_vec4_isnan(v);
|
return glm_vec4_isnan(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_isinf(const vec4 v) {
|
glmc_vec4_isinf(vec4 v) {
|
||||||
return glm_vec4_isinf(v);
|
return glm_vec4_isinf(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
bool
|
bool
|
||||||
glmc_vec4_isvalid(const vec4 v) {
|
glmc_vec4_isvalid(vec4 v) {
|
||||||
return glm_vec4_isvalid(v);
|
return glm_vec4_isvalid(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_sign(const vec4 v, vec4 dest) {
|
glmc_vec4_sign(vec4 v, vec4 dest) {
|
||||||
glm_vec4_sign(v, dest);
|
glm_vec4_sign(v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_sqrt(const vec4 v, vec4 dest) {
|
glmc_vec4_sqrt(vec4 v, vec4 dest) {
|
||||||
glm_vec4_sqrt(v, dest);
|
glm_vec4_sqrt(v, dest);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c), Recep Aslantas.
|
|
||||||
*
|
|
||||||
* MIT License (MIT), http://opensource.org/licenses/MIT
|
|
||||||
* Full license can be found in the LICENSE file
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "test_common.h"
|
|
||||||
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
test_bezier_plain(float s, float p0, float c0, float c1, float p1) {
|
|
||||||
float x, xx, xxx, ss, sss;
|
|
||||||
|
|
||||||
x = 1.0f - s;
|
|
||||||
xx = x * x;
|
|
||||||
xxx = xx * x;
|
|
||||||
ss = s * s;
|
|
||||||
sss = ss * s;
|
|
||||||
|
|
||||||
return p0 * xxx + 3.0f * (c0 * s * xx + c1 * ss * x) + p1 * sss;
|
|
||||||
}
|
|
||||||
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
test_hermite_plain(float s, float p0, float t0, float t1, float p1) {
|
|
||||||
float ss, sss;
|
|
||||||
|
|
||||||
ss = s * s;
|
|
||||||
sss = ss * s;
|
|
||||||
|
|
||||||
return p0 * (2.0f * sss - 3.0f * ss + 1.0f)
|
|
||||||
+ t0 * (sss - 2.0f * ss + s)
|
|
||||||
+ p1 * (-2.0f * sss + 3.0f * ss)
|
|
||||||
+ t1 * (sss - ss);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
test_bezier(void **state) {
|
|
||||||
float s, p0, p1, c0, c1, smc, Bs, Bs_plain;
|
|
||||||
|
|
||||||
s = test_rand();
|
|
||||||
p0 = test_rand();
|
|
||||||
p1 = test_rand();
|
|
||||||
c0 = test_rand();
|
|
||||||
c1 = test_rand();
|
|
||||||
|
|
||||||
/* test cubic bezier */
|
|
||||||
smc = glm_smc(s, GLM_BEZIER_MAT, (vec4){p0, c0, c1, p1});
|
|
||||||
Bs = glm_bezier(s, p0, c0, c1, p1);
|
|
||||||
Bs_plain = test_bezier_plain(s, p0, c0, c1, p1);
|
|
||||||
|
|
||||||
assert_true(glm_eq(Bs, Bs_plain));
|
|
||||||
test_assert_eqf(smc, Bs_plain);
|
|
||||||
test_assert_eqf(Bs, smc);
|
|
||||||
|
|
||||||
/* test cubic hermite */
|
|
||||||
smc = glm_smc(s, GLM_HERMITE_MAT, (vec4){p0, p1, c0, c1});
|
|
||||||
Bs = glm_hermite(s, p0, c0, c1, p1);
|
|
||||||
Bs_plain = test_hermite_plain(s, p0, c0, c1, p1);
|
|
||||||
|
|
||||||
assert_true(glm_eq(Bs, Bs_plain));
|
|
||||||
assert_true(glm_eq(smc, Bs_plain));
|
|
||||||
assert_true(glm_eq(Bs, smc));
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
#include "test_common.h"
|
#include "test_common.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
#define m 4
|
#define m 4
|
||||||
#define n 4
|
#define n 4
|
||||||
@@ -59,7 +58,7 @@ test_rand_vec4(vec4 dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
test_rand(void) {
|
test_rand_angle(void) {
|
||||||
srand((unsigned int)time(NULL));
|
srand((unsigned int)time(NULL));
|
||||||
return drand48();
|
return drand48();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ void
|
|||||||
test_rand_vec4(vec4 dest) ;
|
test_rand_vec4(vec4 dest) ;
|
||||||
|
|
||||||
float
|
float
|
||||||
test_rand(void);
|
test_rand_angle(void);
|
||||||
|
|
||||||
void
|
void
|
||||||
test_rand_quat(versor q);
|
test_rand_quat(versor q);
|
||||||
|
|||||||
@@ -38,10 +38,7 @@ main(int argc, const char * argv[]) {
|
|||||||
cmocka_unit_test(test_vec3),
|
cmocka_unit_test(test_vec3),
|
||||||
|
|
||||||
/* affine */
|
/* affine */
|
||||||
cmocka_unit_test(test_affine),
|
cmocka_unit_test(test_affine)
|
||||||
|
|
||||||
/* bezier */
|
|
||||||
cmocka_unit_test(test_bezier)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return cmocka_run_group_tests(tests, NULL, NULL);
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
||||||
|
|||||||
@@ -40,7 +40,4 @@ test_vec3(void **state);
|
|||||||
void
|
void
|
||||||
test_affine(void **state);
|
test_affine(void **state);
|
||||||
|
|
||||||
void
|
|
||||||
test_bezier(void **state);
|
|
||||||
|
|
||||||
#endif /* test_tests_h */
|
#endif /* test_tests_h */
|
||||||
|
|||||||
@@ -93,13 +93,6 @@ test_vec4(void **state) {
|
|||||||
/* 3. test SIMD norm2 */
|
/* 3. test SIMD norm2 */
|
||||||
test_rand_vec4(v);
|
test_rand_vec4(v);
|
||||||
test_assert_eqf(test_vec4_norm2(v), glm_vec4_norm2(v));
|
test_assert_eqf(test_vec4_norm2(v), glm_vec4_norm2(v));
|
||||||
|
|
||||||
/* 4. test SSE/SIMD distance */
|
|
||||||
test_rand_vec4(v1);
|
|
||||||
test_rand_vec4(v2);
|
|
||||||
d1 = glm_vec4_distance(v1, v2);
|
|
||||||
d2 = sqrtf(powf(v1[0]-v2[0], 2.0f) + pow(v1[1]-v2[1], 2.0f) + pow(v1[2]-v2[2], 2.0f) + pow(v1[3]-v2[3], 2.0f));
|
|
||||||
assert_true(fabsf(d1 - d2) <= 0.000009);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* test zero */
|
/* test zero */
|
||||||
|
|||||||
@@ -20,10 +20,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\affine.c" />
|
<ClCompile Include="..\src\affine.c" />
|
||||||
<ClCompile Include="..\src\bezier.c" />
|
|
||||||
<ClCompile Include="..\src\box.c" />
|
<ClCompile Include="..\src\box.c" />
|
||||||
<ClCompile Include="..\src\cam.c" />
|
<ClCompile Include="..\src\cam.c" />
|
||||||
<ClCompile Include="..\src\curve.c" />
|
|
||||||
<ClCompile Include="..\src\dllmain.c" />
|
<ClCompile Include="..\src\dllmain.c" />
|
||||||
<ClCompile Include="..\src\ease.c" />
|
<ClCompile Include="..\src\ease.c" />
|
||||||
<ClCompile Include="..\src\euler.c" />
|
<ClCompile Include="..\src\euler.c" />
|
||||||
@@ -41,14 +39,11 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\include\cglm\affine-mat.h" />
|
<ClInclude Include="..\include\cglm\affine-mat.h" />
|
||||||
<ClInclude Include="..\include\cglm\affine.h" />
|
<ClInclude Include="..\include\cglm\affine.h" />
|
||||||
<ClInclude Include="..\include\cglm\bezier.h" />
|
|
||||||
<ClInclude Include="..\include\cglm\box.h" />
|
<ClInclude Include="..\include\cglm\box.h" />
|
||||||
<ClInclude Include="..\include\cglm\call.h" />
|
<ClInclude Include="..\include\cglm\call.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\affine.h" />
|
<ClInclude Include="..\include\cglm\call\affine.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\bezier.h" />
|
|
||||||
<ClInclude Include="..\include\cglm\call\box.h" />
|
<ClInclude Include="..\include\cglm\call\box.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\cam.h" />
|
<ClInclude Include="..\include\cglm\call\cam.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\curve.h" />
|
|
||||||
<ClInclude Include="..\include\cglm\call\ease.h" />
|
<ClInclude Include="..\include\cglm\call\ease.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\euler.h" />
|
<ClInclude Include="..\include\cglm\call\euler.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\frustum.h" />
|
<ClInclude Include="..\include\cglm\call\frustum.h" />
|
||||||
@@ -65,7 +60,6 @@
|
|||||||
<ClInclude Include="..\include\cglm\cglm.h" />
|
<ClInclude Include="..\include\cglm\cglm.h" />
|
||||||
<ClInclude Include="..\include\cglm\color.h" />
|
<ClInclude Include="..\include\cglm\color.h" />
|
||||||
<ClInclude Include="..\include\cglm\common.h" />
|
<ClInclude Include="..\include\cglm\common.h" />
|
||||||
<ClInclude Include="..\include\cglm\curve.h" />
|
|
||||||
<ClInclude Include="..\include\cglm\ease.h" />
|
<ClInclude Include="..\include\cglm\ease.h" />
|
||||||
<ClInclude Include="..\include\cglm\euler.h" />
|
<ClInclude Include="..\include\cglm\euler.h" />
|
||||||
<ClInclude Include="..\include\cglm\frustum.h" />
|
<ClInclude Include="..\include\cglm\frustum.h" />
|
||||||
@@ -75,7 +69,6 @@
|
|||||||
<ClInclude Include="..\include\cglm\plane.h" />
|
<ClInclude Include="..\include\cglm\plane.h" />
|
||||||
<ClInclude Include="..\include\cglm\project.h" />
|
<ClInclude Include="..\include\cglm\project.h" />
|
||||||
<ClInclude Include="..\include\cglm\quat.h" />
|
<ClInclude Include="..\include\cglm\quat.h" />
|
||||||
<ClInclude Include="..\include\cglm\simd\arm.h" />
|
|
||||||
<ClInclude Include="..\include\cglm\simd\avx\affine.h" />
|
<ClInclude Include="..\include\cglm\simd\avx\affine.h" />
|
||||||
<ClInclude Include="..\include\cglm\simd\avx\mat4.h" />
|
<ClInclude Include="..\include\cglm\simd\avx\mat4.h" />
|
||||||
<ClInclude Include="..\include\cglm\simd\intrin.h" />
|
<ClInclude Include="..\include\cglm\simd\intrin.h" />
|
||||||
@@ -84,7 +77,6 @@
|
|||||||
<ClInclude Include="..\include\cglm\simd\sse2\mat3.h" />
|
<ClInclude Include="..\include\cglm\simd\sse2\mat3.h" />
|
||||||
<ClInclude Include="..\include\cglm\simd\sse2\mat4.h" />
|
<ClInclude Include="..\include\cglm\simd\sse2\mat4.h" />
|
||||||
<ClInclude Include="..\include\cglm\simd\sse2\quat.h" />
|
<ClInclude Include="..\include\cglm\simd\sse2\quat.h" />
|
||||||
<ClInclude Include="..\include\cglm\simd\x86.h" />
|
|
||||||
<ClInclude Include="..\include\cglm\sphere.h" />
|
<ClInclude Include="..\include\cglm\sphere.h" />
|
||||||
<ClInclude Include="..\include\cglm\types.h" />
|
<ClInclude Include="..\include\cglm\types.h" />
|
||||||
<ClInclude Include="..\include\cglm\util.h" />
|
<ClInclude Include="..\include\cglm\util.h" />
|
||||||
|
|||||||
@@ -84,12 +84,6 @@
|
|||||||
<ClCompile Include="..\src\ease.c">
|
<ClCompile Include="..\src\ease.c">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\src\curve.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\src\bezier.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\config.h">
|
<ClInclude Include="..\src\config.h">
|
||||||
@@ -239,23 +233,5 @@
|
|||||||
<ClInclude Include="..\include\cglm\ease.h">
|
<ClInclude Include="..\include\cglm\ease.h">
|
||||||
<Filter>include\cglm</Filter>
|
<Filter>include\cglm</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\include\cglm\simd\arm.h">
|
|
||||||
<Filter>include\cglm\simd</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\cglm\simd\x86.h">
|
|
||||||
<Filter>include\cglm\simd</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\cglm\call\curve.h">
|
|
||||||
<Filter>include\cglm\call</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\cglm\curve.h">
|
|
||||||
<Filter>include\cglm</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\cglm\bezier.h">
|
|
||||||
<Filter>include\cglm</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\include\cglm\call\bezier.h">
|
|
||||||
<Filter>include\cglm\call</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Reference in New Issue
Block a user