Compare commits

..

12 Commits

Author SHA1 Message Date
Recep Aslantas
1796cc5ce2 Merge pull request #412 from recp/sse_only
separate SSE and SSE2
2024-04-01 17:52:06 +03:00
Recep Aslantas
9ad7dd3fbc Merge pull request #409 from EasyIP2023/feature/expand-content-width
docs: expand wy-nav-content width to edge of screen
2024-03-31 23:44:40 +03:00
Recep Aslantas
28142b5912 Merge pull request #411 from EasyIP2023/bugfix/mat4x3-multiplication
mat4x3: fix multiplication functions
2024-03-31 23:44:00 +03:00
Recep Aslantas
f07d75c680 Merge pull request #410 from EasyIP2023/bugfix/mat4x2-multiplication
mat4x2: fix multiplication functions
2024-03-31 23:43:11 +03:00
Recep Aslantas
17d8b83a38 Merge pull request #408 from EasyIP2023/bugfix/mat3x4-multiplication
mat3x4: fix multiplication functions
2024-03-31 23:41:40 +03:00
Vincent Davis Jr
013ac5dd07 docs: mat4x3 account for latest mulitplication changes
This also includes tables to explain how
mat4x3, column vectors, and row vectors are
represented. Also includes how resulting
matrix or vector is formed.

Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 14:43:31 -04:00
Vincent Davis Jr
a0e3d3766f mat4x3: fix multiplication functions
Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 14:43:30 -04:00
Vincent Davis Jr
fc7f0e13fd docs: mat3x4 account for latest mulitplication changes
This also includes tables to explain how
mat3x4, column vectors, and row vectors are
represented. Also includes how resulting
matrix or vector is formed.

Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 13:43:41 -04:00
Vincent Davis Jr
1340b5d512 mat3x4: fix multiplication functions
Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 13:43:39 -04:00
Vincent Davis Jr
85165dd3e3 docs: mat4x2 account for latest mulitplication changes
This also includes tables to explain how
mat4x2, column vectors, and row vectors are
represented. Also includes how resulting
matrix or vector is formed.

Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 13:40:43 -04:00
Vincent Davis Jr
3445f93fbc mat4x2: fix multiplication functions
Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 13:40:41 -04:00
Vincent Davis Jr
d2642eb206 docs: expand wy-nav-content width to edge of screen
RTD theme's default is 800px as max width for the content,
but we have tables with tons of columns, which need the
full width of the view-port.

Comment from yocto project theme_overrides.css

Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2024-03-31 12:22:13 -04:00
20 changed files with 340 additions and 179 deletions

View File

@@ -91,6 +91,7 @@ todo_include_todos = False
# a list of builtin themes. # a list of builtin themes.
# #
html_theme = 'sphinx_rtd_theme' html_theme = 'sphinx_rtd_theme'
pygments_style = 'monokai'
# 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
@@ -111,8 +112,11 @@ html_theme_options = {
# 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,
# relative to this directory. They are copied after the builtin static files, # relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css". # so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static'] html_static_path = ['sphinx-static']
# Add customm CSS and JS files
html_css_files = ['theme_overrides.css']
html_js_files = []
# -- Options for HTMLHelp output ------------------------------------------ # -- Options for HTMLHelp output ------------------------------------------

View File

@@ -23,6 +23,17 @@ Functions:
#. :c:func:`glm_mat3x4_transpose` #. :c:func:`glm_mat3x4_transpose`
#. :c:func:`glm_mat3x4_scale` #. :c:func:`glm_mat3x4_scale`
Represented
~~~~~~~~~~~
.. csv-table:: mat3x4
:header: "", "column 1", "column 2", "column 3"
"row 1", "m00", "m10", "m20"
"row 2", "m01", "m11", "m21"
"row 3", "m02", "m12", "m22"
"row 4", "m03", "m13", "m23"
Functions documentation Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@@ -51,28 +62,74 @@ Functions documentation
| *[in]* **src** pointer to an array of floats | *[in]* **src** pointer to an array of floats
| *[out]* **dest** destination matrix3x4 | *[out]* **dest** destination matrix3x4
.. c:function:: void glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest) .. c:function:: void glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat4 dest)
multiply m1 and m2 to dest multiply m1 and m2 to dest
.. code-block:: c .. code-block:: c
glm_mat3x4_mul(mat3x4, mat4x3, mat3); glm_mat3x4_mul(mat3x4, mat4x3, mat4);
Parameters: Parameters:
| *[in]* **m1** left matrix (mat3x4) | *[in]* **m1** left matrix (mat3x4)
| *[in]* **m2** right matrix (mat4x3) | *[in]* **m2** right matrix (mat4x3)
| *[out]* **dest** destination matrix (mat3) | *[out]* **dest** destination matrix (mat4)
.. c:function:: void glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest) .. csv-table:: mat3x4
:header: "", "column 1", "column 2", "column 3"
multiply mat3x4 with vec4 (column vector) and store in dest vector "row 1", "a00", "a10", "a20"
"row 2", "a01", "a11", "a21"
"row 3", "a02", "a12", "a22"
"row 4", "a03", "a13", "a23"
.. csv-table:: mat4x3
:header: "", "column 1", "column 2", "column 3", "column 4"
"row 1", "b00", "b10", "b20", "b30"
"row 2", "b01", "b11", "b21", "b31"
"row 3", "b02", "b12", "b22", "b32"
.. csv-table:: mat4x4
:header: "", "column 1", "column 2", "column 3", "column 4"
"row 1", "a00 * b00 + a10 * b01 + a20 * b02", "a00 * b10 + a10 * b11 + a20 * b12", "a00 * b20 + a10 * b21 + a20 * b22", "a00 * b30 + a10 * b31 + a20 * b32"
"row 2", "a01 * b00 + a11 * b01 + a21 * b02", "a01 * b10 + a11 * b11 + a21 * b12", "a01 * b20 + a11 * b21 + a21 * b22", "a01 * b30 + a11 * b31 + a21 * b32"
"row 3", "a02 * b00 + a12 * b01 + a22 * b02", "a02 * b10 + a12 * b11 + a22 * b12", "a02 * b20 + a12 * b21 + a22 * b22", "a02 * b30 + a12 * b31 + a22 * b32"
"row 4", "a03 * b00 + a13 * b01 + a23 * b02", "a03 * b10 + a13 * b11 + a23 * b12", "a03 * b20 + a13 * b21 + a23 * b22", "a03 * b30 + a13 * b31 + a23 * b32"
.. c:function:: void glm_mat3x4_mulv(mat3x4 m, vec3 v, vec4 dest)
multiply mat3x4 with vec3 (column vector) and store in dest vector
Parameters: Parameters:
| *[in]* **m** mat3x4 (left) | *[in]* **m** mat3x4 (left)
| *[in]* **v** vec4 (right, column vector) | *[in]* **v** vec3 (right, column vector)
| *[out]* **dest** destination (result, column vector) | *[out]* **dest** destination (result, column vector)
.. csv-table:: mat3x4
:header: "", "column 1", "column 2", "column 3"
"row 1", "m00", "m10", "m20"
"row 2", "m01", "m11", "m21"
"row 3", "m02", "m12", "m22"
"row 4", "m03", "m13", "m23"
.. csv-table:: column vec3 (1x3)
:header: "", "column 1"
"row 1", "v0"
"row 2", "v1"
"row 3", "v2"
.. csv-table:: column vec4 (1x4)
:header: "", "column 1"
"row 1", "m00 * v0 + m10 * v1 + m20 * v2"
"row 2", "m01 * v0 + m11 * v1 + m21 * v2"
"row 3", "m02 * v0 + m12 * v1 + m22 * v2"
"row 4", "m03 * v0 + m13 * v1 + m23 * v2"
.. c:function:: void glm_mat3x4_transpose(mat3x4 m, mat4x3 dest) .. c:function:: void glm_mat3x4_transpose(mat3x4 m, mat4x3 dest)
transpose matrix and store in dest transpose matrix and store in dest

View File

@@ -23,6 +23,15 @@ Functions:
#. :c:func:`glm_mat4x2_transpose` #. :c:func:`glm_mat4x2_transpose`
#. :c:func:`glm_mat4x2_scale` #. :c:func:`glm_mat4x2_scale`
Represented
~~~~~~~~~~~
.. csv-table:: mat4x2
:header: "", "column 1", "column 2", "column 3", "column4"
"row 1", "m00", "m10", "m20", "m30"
"row 2", "m01", "m11", "m21", "m31"
Functions documentation Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@@ -51,28 +60,70 @@ Functions documentation
| *[in]* **src** pointer to an array of floats | *[in]* **src** pointer to an array of floats
| *[out]* **dest** destination matrix4x2 | *[out]* **dest** destination matrix4x2
.. c:function:: void glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest) .. c:function:: void glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat2 dest)
multiply m1 and m2 to dest multiply m1 and m2 to dest
.. code-block:: c .. code-block:: c
glm_mat4x2_mul(mat4x2, mat2x4, mat4); glm_mat4x2_mul(mat4x2, mat2x4, mat2);
Parameters: Parameters:
| *[in]* **m1** left matrix (mat4x2) | *[in]* **m1** left matrix (mat4x2)
| *[in]* **m2** right matrix (mat2x4) | *[in]* **m2** right matrix (mat2x4)
| *[out]* **dest** destination matrix (mat4) | *[out]* **dest** destination matrix (mat2)
.. c:function:: void glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest) .. csv-table:: mat4x2
:header: "", "column 1", "column 2", "column 3", "column 4"
multiply mat4x2 with vec2 (column vector) and store in dest vector "row 1", "a00", "a10", "a20", "a30"
"row 2", "a01", "a11", "a21", "a31"
.. csv-table:: mat2x4
:header: "", "column 1", "column 2"
"row 1", "b00", "b10"
"row 2", "b01", "b11"
"row 3", "b02", "b12"
"row 4", "b03", "b13"
.. csv-table:: mat2x2
:header: "", "column 1", "column 2"
"row 1", "a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03", "a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13"
"row 2", "a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03", "a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13"
.. c:function:: void glm_mat4x2_mulv(mat4x2 m, vec4 v, vec2 dest)
multiply mat4x2 with vec4 (column vector) and store in dest vector
Parameters: Parameters:
| *[in]* **m** mat4x2 (left) | *[in]* **m** mat4x2 (left)
| *[in]* **v** vec2 (right, column vector) | *[in]* **v** vec4 (right, column vector)
| *[out]* **dest** destination (result, column vector) | *[out]* **dest** destination (result, column vector)
.. csv-table:: mat4x2
:header: "", "column 1", "column 2", "column 3"
"row 1", "m00", "m10", "m20"
"row 2", "m01", "m11", "m21"
"row 3", "m02", "m12", "m22"
"row 4", "m03", "m13", "m23"
.. csv-table:: column vec4 (1x4)
:header: "", "column 1"
"row 1", "v0"
"row 2", "v1"
"row 3", "v2"
"row 4", "v3"
.. csv-table:: column vec2 (1x2)
:header: "", "column 1"
"row 1", "m00 * v0 + m10 * v1 + m20 * v2 + m30 * v3"
"row 2", "m01 * v0 + m11 * v1 + m21 * v2 + m31 * v3"
.. c:function:: void glm_mat4x2_transpose(mat4x2 m, mat2x4 dest) .. c:function:: void glm_mat4x2_transpose(mat4x2 m, mat2x4 dest)
transpose matrix and store in dest transpose matrix and store in dest

View File

@@ -23,6 +23,16 @@ Functions:
#. :c:func:`glm_mat4x3_transpose` #. :c:func:`glm_mat4x3_transpose`
#. :c:func:`glm_mat4x3_scale` #. :c:func:`glm_mat4x3_scale`
Represented
~~~~~~~~~~~
.. csv-table:: mat4x3
:header: "", "column 1", "column 2", "column 3", "column4"
"row 1", "m00", "m10", "m20", "m30"
"row 2", "m01", "m11", "m21", "m31"
"row 3", "m02", "m12", "m22", "m32"
Functions documentation Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@@ -51,28 +61,72 @@ Functions documentation
| *[in]* **src** pointer to an array of floats | *[in]* **src** pointer to an array of floats
| *[out]* **dest** destination matrix4x3 | *[out]* **dest** destination matrix4x3
.. c:function:: void glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest) .. c:function:: void glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat3 dest)
multiply m1 and m2 to dest multiply m1 and m2 to dest
.. code-block:: c .. code-block:: c
glm_mat4x3_mul(mat4x3, mat3x4, mat4); glm_mat4x3_mul(mat4x3, mat3x4, mat3);
Parameters: Parameters:
| *[in]* **m1** left matrix (mat4x3) | *[in]* **m1** left matrix (mat4x3)
| *[in]* **m2** right matrix (mat3x4) | *[in]* **m2** right matrix (mat3x4)
| *[out]* **dest** destination matrix (mat4) | *[out]* **dest** destination matrix (mat3)
.. c:function:: void glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest) .. csv-table:: mat4x3
:header: "", "column 1", "column 2", "column 3", "column 4"
multiply mat4x3 with vec3 (column vector) and store in dest vector "row 1", "a00", "a10", "a20", "a30"
"row 2", "a01", "a11", "a21", "a31"
"row 3", "a02", "a12", "a22", "a32"
.. csv-table:: mat3x4
:header: "", "column 1", "column 2", "column 3"
"row 1", "b00", "b10", "b20"
"row 2", "b01", "b11", "b21"
"row 3", "b02", "b12", "b22"
"row 4", "b03", "b13", "b23"
.. csv-table:: mat3x3
:header: "", "column 1", "column 2", "column 3"
"row 1", "a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03", "a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13", "a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23"
"row 2", "a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03", "a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13", "a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23"
"row 3", "a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03", "a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13", "a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23"
.. c:function:: void glm_mat4x3_mulv(mat4x3 m, vec4 v, vec3 dest)
multiply mat4x3 with vec4 (column vector) and store in dest column vector
Parameters: Parameters:
| *[in]* **m** mat4x3 (left) | *[in]* **m** mat4x3 (left)
| *[in]* **v** vec3 (right, column vector) | *[in]* **v** vec4 (right, column vector)
| *[out]* **dest** destination (result, column vector) | *[out]* **dest** destination (result, column vector)
.. csv-table:: mat4x3
:header: "", "column 1", "column 2", "column 3", "column 4"
"row 1", "m00", "m10", "m20", "m30"
"row 2", "m01", "m11", "m21", "m31"
"row 3", "m02", "m12", "m22", "m32"
.. csv-table:: column vec4 (1x4)
:header: "", "column 1"
"row 1", "v0"
"row 2", "v1"
"row 3", "v2"
"row 4", "v3"
.. csv-table:: column vec3 (1x3)
:header: "", "column 1"
"row 1", "m00 * v0 + m10 * v1 + m20 * v2 + m30 * v3"
"row 2", "m01 * v0 + m11 * v1 + m21 * v2 + m31 * v3"
"row 3", "m02 * v0 + m12 * v1 + m22 * v2 + m32 * v3"
.. c:function:: void glm_mat4x3_transpose(mat4x3 m, mat3x4 dest) .. c:function:: void glm_mat4x3_transpose(mat4x3 m, mat3x4 dest)
transpose matrix and store in dest transpose matrix and store in dest

View File

@@ -0,0 +1,12 @@
@media screen {
/* content column
*
* RTD theme's default is 800px as max width for the content, but we have
* tables with tons of columns, which need the full width of the view-port.
*
* Comment from yocto project theme_overrides.css
*/
.wy-nav-content{ max-width: none; }
}

View File

@@ -27,11 +27,11 @@ glmc_mat3x4_make(const float * __restrict src, mat3x4 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest); glmc_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat4 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest); glmc_mat3x4_mulv(mat3x4 m, vec3 v, vec4 dest);
CGLM_EXPORT CGLM_EXPORT
void void

View File

@@ -27,11 +27,11 @@ glmc_mat4x2_make(const float * __restrict src, mat4x2 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest); glmc_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat2 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest); glmc_mat4x2_mulv(mat4x2 m, vec4 v, vec2 dest);
CGLM_EXPORT CGLM_EXPORT
void void

View File

@@ -27,11 +27,11 @@ glmc_mat4x3_make(const float * __restrict src, mat4x3 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest); glmc_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat3 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest); glmc_mat4x3_mulv(mat4x3 m, vec4 v, vec3 dest);
CGLM_EXPORT CGLM_EXPORT
void void

View File

@@ -14,8 +14,8 @@
CGLM_INLINE void glm_mat3x4_copy(mat3x4 mat, mat3x4 dest); CGLM_INLINE void glm_mat3x4_copy(mat3x4 mat, mat3x4 dest);
CGLM_INLINE void glm_mat3x4_zero(mat3x4 mat); CGLM_INLINE void glm_mat3x4_zero(mat3x4 mat);
CGLM_INLINE void glm_mat3x4_make(const float * __restrict src, mat3x4 dest); CGLM_INLINE void glm_mat3x4_make(const float * __restrict src, mat3x4 dest);
CGLM_INLINE void glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest); CGLM_INLINE void glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat4 dest);
CGLM_INLINE void glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest); CGLM_INLINE void glm_mat3x4_mulv(mat3x4 m, vec3 v, vec4 dest);
CGLM_INLINE void glm_mat3x4_transpose(mat3x4 m, mat4x3 dest); CGLM_INLINE void glm_mat3x4_transpose(mat3x4 m, mat4x3 dest);
CGLM_INLINE void glm_mat3x4_scale(mat3x4 m, float s); CGLM_INLINE void glm_mat3x4_scale(mat3x4 m, float s);
*/ */
@@ -87,16 +87,16 @@ glm_mat3x4_make(const float * __restrict src, mat3x4 dest) {
* @brief multiply m1 and m2 to dest * @brief multiply m1 and m2 to dest
* *
* @code * @code
* glm_mat3x4_mul(mat3x4, mat4x3, mat3); * glm_mat3x4_mul(mat3x4, mat4x3, mat4);
* @endcode * @endcode
* *
* @param[in] m1 left matrix (mat3x4) * @param[in] m1 left matrix (mat3x4)
* @param[in] m2 right matrix (mat4x3) * @param[in] m2 right matrix (mat4x3)
* @param[out] dest destination matrix (mat3) * @param[out] dest destination matrix (mat4)
*/ */
CGLM_INLINE CGLM_INLINE
void void
glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest) { glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat4 dest) {
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],
a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2], a13 = m1[1][3], a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2], a13 = m1[1][3],
a20 = m1[2][0], a21 = m1[2][1], a22 = m1[2][2], a23 = m1[2][3], a20 = m1[2][0], a21 = m1[2][1], a22 = m1[2][2], a23 = m1[2][3],
@@ -106,21 +106,29 @@ glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest) {
b20 = m2[2][0], b21 = m2[2][1], b22 = m2[2][2], b20 = m2[2][0], b21 = m2[2][1], b22 = m2[2][2],
b30 = m2[3][0], b31 = m2[3][1], b32 = m2[3][2]; b30 = m2[3][0], b31 = m2[3][1], b32 = m2[3][2];
dest[0][0] = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30; dest[0][0] = a00 * b00 + a10 * b01 + a20 * b02;
dest[0][1] = a00 * b01 + a01 * b11 + a02 * b21 + a03 * b31; dest[0][1] = a01 * b00 + a11 * b01 + a21 * b02;
dest[0][2] = a00 * b02 + a01 * b12 + a02 * b22 + a03 * b32; dest[0][2] = a02 * b00 + a12 * b01 + a22 * b02;
dest[0][3] = a03 * b00 + a13 * b01 + a23 * b02;
dest[1][0] = a10 * b00 + a11 * b10 + a12 * b20 + a13 * b30; dest[1][0] = a00 * b10 + a10 * b11 + a20 * b12;
dest[1][1] = a10 * b01 + a11 * b11 + a12 * b21 + a13 * b31; dest[1][1] = a01 * b10 + a11 * b11 + a21 * b12;
dest[1][2] = a10 * b02 + a11 * b12 + a12 * b22 + a13 * b32; dest[1][2] = a02 * b10 + a12 * b11 + a22 * b12;
dest[1][3] = a03 * b10 + a13 * b11 + a23 * b12;
dest[2][0] = a20 * b00 + a21 * b10 + a22 * b20 + a23 * b30; dest[2][0] = a00 * b20 + a10 * b21 + a20 * b22;
dest[2][1] = a20 * b01 + a21 * b11 + a22 * b21 + a23 * b31; dest[2][1] = a01 * b20 + a11 * b21 + a21 * b22;
dest[2][2] = a20 * b02 + a21 * b12 + a22 * b22 + a23 * b32; dest[2][2] = a02 * b20 + a12 * b21 + a22 * b22;
dest[2][3] = a03 * b20 + a13 * b21 + a23 * b22;
dest[3][0] = a00 * b30 + a10 * b31 + a20 * b32;
dest[3][1] = a01 * b30 + a11 * b31 + a21 * b32;
dest[3][2] = a02 * b30 + a12 * b31 + a22 * b32;
dest[3][3] = a03 * b30 + a13 * b31 + a23 * b32;
} }
/*! /*!
* @brief multiply matrix with column vector and store in dest vector * @brief multiply matrix with column vector and store in dest column vector
* *
* @param[in] m matrix (left) * @param[in] m matrix (left)
* @param[in] v vector (right, column vector) * @param[in] v vector (right, column vector)
@@ -128,12 +136,13 @@ glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest) {
*/ */
CGLM_INLINE CGLM_INLINE
void void
glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest) { glm_mat3x4_mulv(mat3x4 m, vec3 v, vec4 dest) {
float v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3]; float v0 = v[0], v1 = v[1], v2 = v[2];
dest[0] = m[0][0] * v0 + m[0][1] * v1 + m[0][2] * v2 + m[0][3] * v3; dest[0] = m[0][0] * v0 + m[1][0] * v1 + m[2][0] * v2;
dest[1] = m[1][0] * v0 + m[1][1] * v1 + m[1][2] * v2 + m[1][3] * v3; dest[1] = m[0][1] * v0 + m[1][1] * v1 + m[2][1] * v2;
dest[2] = m[2][0] * v0 + m[2][1] * v1 + m[2][2] * v2 + m[2][3] * v3; dest[2] = m[0][2] * v0 + m[1][2] * v1 + m[2][2] * v2;
dest[3] = m[0][3] * v0 + m[1][3] * v1 + m[2][3] * v2;
} }
/*! /*!
@@ -162,10 +171,9 @@ glm_mat3x4_transpose(mat3x4 m, mat4x3 dest) {
CGLM_INLINE CGLM_INLINE
void void
glm_mat3x4_scale(mat3x4 m, float s) { glm_mat3x4_scale(mat3x4 m, float s) {
m[0][0] *= s; m[1][0] *= s; m[2][0] *= s; m[0][0] *= s; m[0][1] *= s; m[0][2] *= s; m[0][3] *= s;
m[0][1] *= s; m[1][1] *= s; m[2][1] *= s; m[1][0] *= s; m[1][1] *= s; m[1][2] *= s; m[1][3] *= s;
m[0][2] *= s; m[1][2] *= s; m[2][2] *= s; m[2][0] *= s; m[2][1] *= s; m[2][2] *= s; m[2][3] *= s;
m[0][3] *= s; m[1][3] *= s; m[2][3] *= s;
} }
#endif #endif

View File

@@ -14,8 +14,8 @@
CGLM_INLINE void glm_mat4x2_copy(mat4x2 mat, mat4x2 dest); CGLM_INLINE void glm_mat4x2_copy(mat4x2 mat, mat4x2 dest);
CGLM_INLINE void glm_mat4x2_zero(mat4x2 mat); CGLM_INLINE void glm_mat4x2_zero(mat4x2 mat);
CGLM_INLINE void glm_mat4x2_make(const float * __restrict src, mat4x2 dest); CGLM_INLINE void glm_mat4x2_make(const float * __restrict src, mat4x2 dest);
CGLM_INLINE void glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest); CGLM_INLINE void glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat2 dest);
CGLM_INLINE void glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest); CGLM_INLINE void glm_mat4x2_mulv(mat4x2 m, vec4 v, vec2 dest);
CGLM_INLINE void glm_mat4x2_transpose(mat4x2 m, mat2x4 dest); CGLM_INLINE void glm_mat4x2_transpose(mat4x2 m, mat2x4 dest);
CGLM_INLINE void glm_mat4x2_scale(mat4x2 m, float s); CGLM_INLINE void glm_mat4x2_scale(mat4x2 m, float s);
*/ */
@@ -90,16 +90,16 @@ glm_mat4x2_make(const float * __restrict src, mat4x2 dest) {
* @brief multiply m1 and m2 to dest * @brief multiply m1 and m2 to dest
* *
* @code * @code
* glm_mat4x2_mul(mat4x2, mat2x4, mat4); * glm_mat4x2_mul(mat4x2, mat2x4, mat2);
* @endcode * @endcode
* *
* @param[in] m1 left matrix (mat4x2) * @param[in] m1 left matrix (mat4x2)
* @param[in] m2 right matrix (mat2x4) * @param[in] m2 right matrix (mat2x4)
* @param[out] dest destination matrix (mat4) * @param[out] dest destination matrix (mat2)
*/ */
CGLM_INLINE CGLM_INLINE
void void
glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest) { glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat2 dest) {
float a00 = m1[0][0], a01 = m1[0][1], float a00 = m1[0][0], a01 = m1[0][1],
a10 = m1[1][0], a11 = m1[1][1], a10 = m1[1][0], a11 = m1[1][1],
a20 = m1[2][0], a21 = m1[2][1], a20 = m1[2][0], a21 = m1[2][1],
@@ -108,29 +108,15 @@ glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest) {
b00 = m2[0][0], b01 = m2[0][1], b02 = m2[0][2], b03 = m2[0][3], b00 = m2[0][0], b01 = m2[0][1], b02 = m2[0][2], b03 = m2[0][3],
b10 = m2[1][0], b11 = m2[1][1], b12 = m2[1][2], b13 = m2[1][3]; b10 = m2[1][0], b11 = m2[1][1], b12 = m2[1][2], b13 = m2[1][3];
dest[0][0] = a00 * b00 + a01 * b10; dest[0][0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;
dest[0][1] = a00 * b01 + a01 * b11; dest[0][1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;
dest[0][2] = a00 * b02 + a01 * b12;
dest[0][3] = a00 * b03 + a01 * b13;
dest[1][0] = a10 * b00 + a11 * b10; dest[1][0] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;
dest[1][1] = a10 * b01 + a11 * b11; dest[1][1] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;
dest[1][2] = a10 * b02 + a11 * b12;
dest[1][3] = a10 * b03 + a11 * b13;
dest[2][0] = a20 * b00 + a21 * b10;
dest[2][1] = a20 * b01 + a21 * b11;
dest[2][2] = a20 * b02 + a21 * b12;
dest[2][3] = a20 * b03 + a21 * b13;
dest[3][0] = a30 * b00 + a31 * b10;
dest[3][1] = a30 * b01 + a31 * b11;
dest[3][2] = a30 * b02 + a31 * b12;
dest[3][3] = a30 * b03 + a31 * b13;
} }
/*! /*!
* @brief multiply matrix with column vector and store in dest vector * @brief multiply matrix with column vector and store in dest column vector
* *
* @param[in] m matrix (left) * @param[in] m matrix (left)
* @param[in] v vector (right, column vector) * @param[in] v vector (right, column vector)
@@ -138,13 +124,11 @@ glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest) {
*/ */
CGLM_INLINE CGLM_INLINE
void void
glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest) { glm_mat4x2_mulv(mat4x2 m, vec4 v, vec2 dest) {
float v0 = v[0], v1 = v[1]; float v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];
dest[0] = m[0][0] * v0 + m[0][1] * v1; dest[0] = m[0][0] * v0 + m[1][0] * v1 + m[2][0] * v2 + m[3][0] * v3;
dest[1] = m[1][0] * v0 + m[1][1] * v1; dest[1] = m[0][1] * v0 + m[1][1] * v1 + m[2][1] * v2 + m[3][1] * v3;
dest[2] = m[2][0] * v0 + m[2][1] * v1;
dest[3] = m[3][0] * v0 + m[3][1] * v1;
} }
/*! /*!

View File

@@ -14,8 +14,8 @@
CGLM_INLINE void glm_mat4x3_copy(mat4x3 mat, mat4x3 dest); CGLM_INLINE void glm_mat4x3_copy(mat4x3 mat, mat4x3 dest);
CGLM_INLINE void glm_mat4x3_zero(mat4x3 mat); CGLM_INLINE void glm_mat4x3_zero(mat4x3 mat);
CGLM_INLINE void glm_mat4x3_make(const float * __restrict src, mat4x3 dest); CGLM_INLINE void glm_mat4x3_make(const float * __restrict src, mat4x3 dest);
CGLM_INLINE void glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest); CGLM_INLINE void glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat3 dest);
CGLM_INLINE void glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest); CGLM_INLINE void glm_mat4x3_mulv(mat4x3 m, vec4 v, vec3 dest);
CGLM_INLINE void glm_mat4x3_transpose(mat4x3 m, mat3x4 dest); CGLM_INLINE void glm_mat4x3_transpose(mat4x3 m, mat3x4 dest);
CGLM_INLINE void glm_mat4x3_scale(mat4x3 m, float s); CGLM_INLINE void glm_mat4x3_scale(mat4x3 m, float s);
*/ */
@@ -99,16 +99,16 @@ glm_mat4x3_make(const float * __restrict src, mat4x3 dest) {
* @brief multiply m1 and m2 to dest * @brief multiply m1 and m2 to dest
* *
* @code * @code
* glm_mat4x3_mul(mat4x3, mat3x4, mat4); * glm_mat4x3_mul(mat4x3, mat3x4, mat3);
* @endcode * @endcode
* *
* @param[in] m1 left matrix (mat4x3) * @param[in] m1 left matrix (mat4x3)
* @param[in] m2 right matrix (mat3x4) * @param[in] m2 right matrix (mat3x4)
* @param[out] dest destination matrix (mat4) * @param[out] dest destination matrix (mat3)
*/ */
CGLM_INLINE CGLM_INLINE
void void
glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest) { glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat3 dest) {
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2], float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2],
a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2], a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2],
a20 = m1[2][0], a21 = m1[2][1], a22 = m1[2][2], a20 = m1[2][0], a21 = m1[2][1], a22 = m1[2][2],
@@ -118,29 +118,21 @@ glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest) {
b10 = m2[1][0], b11 = m2[1][1], b12 = m2[1][2], b13 = m2[1][3], b10 = m2[1][0], b11 = m2[1][1], b12 = m2[1][2], b13 = m2[1][3],
b20 = m2[2][0], b21 = m2[2][1], b22 = m2[2][2], b23 = m2[2][3]; b20 = m2[2][0], b21 = m2[2][1], b22 = m2[2][2], b23 = m2[2][3];
dest[0][0] = a00 * b00 + a01 * b10 + a02 * b20; dest[0][0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;
dest[0][1] = a00 * b01 + a01 * b11 + a02 * b21; dest[0][1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;
dest[0][2] = a00 * b02 + a01 * b12 + a02 * b22; dest[0][2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;
dest[0][3] = a00 * b03 + a01 * b13 + a02 * b23;
dest[1][0] = a10 * b00 + a11 * b10 + a12 * b20; dest[1][0] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;
dest[1][1] = a10 * b01 + a11 * b11 + a12 * b21; dest[1][1] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;
dest[1][2] = a10 * b02 + a11 * b12 + a12 * b22; dest[1][2] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;
dest[1][3] = a10 * b03 + a11 * b13 + a12 * b23;
dest[2][0] = a20 * b00 + a21 * b10 + a22 * b20; dest[2][0] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;
dest[2][1] = a20 * b01 + a21 * b11 + a22 * b21; dest[2][1] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;
dest[2][2] = a20 * b02 + a21 * b12 + a22 * b22; dest[2][2] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;
dest[2][3] = a20 * b03 + a21 * b13 + a22 * b23;
dest[3][0] = a30 * b00 + a31 * b10 + a32 * b20;
dest[3][1] = a30 * b01 + a31 * b11 + a32 * b21;
dest[3][2] = a30 * b02 + a31 * b12 + a32 * b22;
dest[3][3] = a30 * b03 + a31 * b13 + a32 * b23;
} }
/*! /*!
* @brief multiply matrix with column vector and store in dest vector * @brief multiply matrix with column vector and store in dest column vector
* *
* @param[in] m matrix (left) * @param[in] m matrix (left)
* @param[in] v vector (right, column vector) * @param[in] v vector (right, column vector)
@@ -148,13 +140,12 @@ glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest) {
*/ */
CGLM_INLINE CGLM_INLINE
void void
glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest) { glm_mat4x3_mulv(mat4x3 m, vec4 v, vec3 dest) {
float v0 = v[0], v1 = v[1], v2 = v[2]; float v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];
dest[0] = m[0][0] * v0 + m[0][1] * v1 + m[0][2] * v2; dest[0] = m[0][0] * v0 + m[1][0] * v1 + m[2][0] * v2 + m[3][0] * v3;
dest[1] = m[1][0] * v0 + m[1][1] * v1 + m[1][2] * v2; dest[1] = m[0][1] * v0 + m[1][1] * v1 + m[2][1] * v2 + m[3][1] * v3;
dest[2] = m[2][0] * v0 + m[2][1] * v1 + m[2][2] * v2; dest[2] = m[0][2] * v0 + m[1][2] * v1 + m[2][2] * v2 + m[3][2] * v3;
dest[3] = m[3][0] * v0 + m[3][1] * v1 + m[3][2] * v2;
} }
/*! /*!

View File

@@ -13,8 +13,8 @@
Functions: Functions:
CGLM_INLINE mat3x4s glms_mat3x4_zero(void); CGLM_INLINE mat3x4s glms_mat3x4_zero(void);
CGLM_INLINE mat3x4s glms_mat3x4_make(const float * __restrict src); CGLM_INLINE mat3x4s glms_mat3x4_make(const float * __restrict src);
CGLM_INLINE mat3s glms_mat3x4_mul(mat3x4s m1, mat4x3s m2); CGLM_INLINE mat4s glms_mat3x4_mul(mat3x4s m1, mat4x3s m2);
CGLM_INLINE vec3s glms_mat3x4_mulv(mat3x4s m, vec4s v); CGLM_INLINE vec4s glms_mat3x4_mulv(mat3x4s m, vec3s v);
CGLM_INLINE mat4x3s glms_mat3x4_transpose(mat3x4s m); CGLM_INLINE mat4x3s glms_mat3x4_transpose(mat3x4s m);
CGLM_INLINE mat3x4s glms_mat3x4_scale(mat3x4s m, float s); CGLM_INLINE mat3x4s glms_mat3x4_scale(mat3x4s m, float s);
*/ */
@@ -70,27 +70,27 @@ glms_mat3x4_(make)(const float * __restrict src) {
* *
* @param[in] m1 left matrix (mat3x4s) * @param[in] m1 left matrix (mat3x4s)
* @param[in] m2 right matrix (mat4x3s) * @param[in] m2 right matrix (mat4x3s)
* @returns destination matrix (mat3s) * @returns destination matrix (mat4s)
*/ */
CGLM_INLINE CGLM_INLINE
mat3s mat4s
glms_mat3x4_(mul)(mat3x4s m1, mat4x3s m2) { glms_mat3x4_(mul)(mat3x4s m1, mat4x3s m2) {
mat3s r; mat4s r;
glm_mat3x4_mul(m1.raw, m2.raw, r.raw); glm_mat3x4_mul(m1.raw, m2.raw, r.raw);
return r; return r;
} }
/*! /*!
* @brief multiply matrix with column vector and store in dest vector * @brief multiply matrix with column vector and store in dest column vector
* *
* @param[in] m matrix (left) * @param[in] m matrix (left)
* @param[in] v vector (right, column vector) * @param[in] v vector (right, column vector)
* @param[out] dest result vector * @returns destination vector (vec4s)
*/ */
CGLM_INLINE CGLM_INLINE
vec3s vec4s
glms_mat3x4_(mulv)(mat3x4s m, vec4s v) { glms_mat3x4_(mulv)(mat3x4s m, vec3s v) {
vec3s r; vec4s r;
glm_mat3x4_mulv(m.raw, v.raw, r.raw); glm_mat3x4_mulv(m.raw, v.raw, r.raw);
return r; return r;
} }

View File

@@ -13,8 +13,8 @@
Functions: Functions:
CGLM_INLINE mat4x2s glms_mat4x2_zero(void); CGLM_INLINE mat4x2s glms_mat4x2_zero(void);
CGLM_INLINE mat4x2s glms_mat4x2_make(const float * __restrict src); CGLM_INLINE mat4x2s glms_mat4x2_make(const float * __restrict src);
CGLM_INLINE mat4s glms_mat4x2_mul(mat4x2s m1, mat2x4s m2); CGLM_INLINE mat2s glms_mat4x2_mul(mat4x2s m1, mat2x4s m2);
CGLM_INLINE vec4s glms_mat4x2_mulv(mat4x2s m, vec2s v); CGLM_INLINE vec2s glms_mat4x2_mulv(mat4x2s m, vec4s v);
CGLM_INLINE mat2x4s glms_mat4x2_transpose(mat4x2s m); CGLM_INLINE mat2x4s glms_mat4x2_transpose(mat4x2s m);
CGLM_INLINE mat4x2s glms_mat4x2_scale(mat4x2s m, float s); CGLM_INLINE mat4x2s glms_mat4x2_scale(mat4x2s m, float s);
*/ */
@@ -71,27 +71,27 @@ glms_mat4x2_(make)(const float * __restrict src) {
* *
* @param[in] m1 left matrix (mat4x2s) * @param[in] m1 left matrix (mat4x2s)
* @param[in] m2 right matrix (mat2x4s) * @param[in] m2 right matrix (mat2x4s)
* @returns destination matrix (mat4s) * @returns destination matrix (mat2s)
*/ */
CGLM_INLINE CGLM_INLINE
mat4s mat2s
glms_mat4x2_(mul)(mat4x2s m1, mat2x4s m2) { glms_mat4x2_(mul)(mat4x2s m1, mat2x4s m2) {
mat4s r; mat2s r;
glm_mat4x2_mul(m1.raw, m2.raw, r.raw); glm_mat4x2_mul(m1.raw, m2.raw, r.raw);
return r; return r;
} }
/*! /*!
* @brief multiply matrix with column vector and store in dest vector * @brief multiply matrix with column vector and store in dest column vector
* *
* @param[in] m matrix (left) * @param[in] m matrix (left)
* @param[in] v vector (right, column vector) * @param[in] v vector (right, column vector)
* @param[out] dest result vector * @returns destination vector (vec2s)
*/ */
CGLM_INLINE CGLM_INLINE
vec4s vec2s
glms_mat4x2_(mulv)(mat4x2s m, vec2s v) { glms_mat4x2_(mulv)(mat4x2s m, vec4s v) {
vec4s r; vec2s r;
glm_mat4x2_mulv(m.raw, v.raw, r.raw); glm_mat4x2_mulv(m.raw, v.raw, r.raw);
return r; return r;
} }

View File

@@ -13,8 +13,8 @@
Functions: Functions:
CGLM_INLINE mat4x3s glms_mat4x3_zero(void); CGLM_INLINE mat4x3s glms_mat4x3_zero(void);
CGLM_INLINE mat4x3s glms_mat4x3_make(const float * __restrict src); CGLM_INLINE mat4x3s glms_mat4x3_make(const float * __restrict src);
CGLM_INLINE mat4s glms_mat4x3_mul(mat4x3s m1, mat3x4s m2); CGLM_INLINE mat3s glms_mat4x3_mul(mat4x3s m1, mat3x4s m2);
CGLM_INLINE vec4s glms_mat4x3_mulv(mat4x3s m, vec3s v); CGLM_INLINE vec3s glms_mat4x3_mulv(mat4x3s m, vec4s v);
CGLM_INLINE mat3x4s glms_mat4x3_transpose(mat4x3s m); CGLM_INLINE mat3x4s glms_mat4x3_transpose(mat4x3s m);
CGLM_INLINE mat4x3s glms_mat4x3_scale(mat4x3s m, float s); CGLM_INLINE mat4x3s glms_mat4x3_scale(mat4x3s m, float s);
*/ */
@@ -70,12 +70,12 @@ glms_mat4x3_(make)(const float * __restrict src) {
* *
* @param[in] m1 left matrix (mat4x3s) * @param[in] m1 left matrix (mat4x3s)
* @param[in] m2 right matrix (mat3x4s) * @param[in] m2 right matrix (mat3x4s)
* @returns destination matrix (mat4s) * @returns destination matrix (mat3s)
*/ */
CGLM_INLINE CGLM_INLINE
mat4s mat3s
glms_mat4x3_(mul)(mat4x3s m1, mat3x4s m2) { glms_mat4x3_(mul)(mat4x3s m1, mat3x4s m2) {
mat4s r; mat3s r;
glm_mat4x3_mul(m1.raw, m2.raw, r.raw); glm_mat4x3_mul(m1.raw, m2.raw, r.raw);
return r; return r;
} }
@@ -85,12 +85,12 @@ glms_mat4x3_(mul)(mat4x3s m1, mat3x4s m2) {
* *
* @param[in] m matrix (left) * @param[in] m matrix (left)
* @param[in] v vector (right, column vector) * @param[in] v vector (right, column vector)
* @param[out] dest result vector * @returns destination vector (vec3s)
*/ */
CGLM_INLINE CGLM_INLINE
vec4s vec3s
glms_mat4x3_(mulv)(mat4x3s m, vec3s v) { glms_mat4x3_(mulv)(mat4x3s m, vec4s v) {
vec4s r; vec3s r;
glm_mat4x3_mulv(m.raw, v.raw, r.raw); glm_mat4x3_mulv(m.raw, v.raw, r.raw);
return r; return r;
} }

View File

@@ -28,13 +28,13 @@ glmc_mat3x4_make(const float * __restrict src, mat3x4 dest) {
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest) { glmc_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat4 dest) {
glm_mat3x4_mul(m1, m2, dest); glm_mat3x4_mul(m1, m2, dest);
} }
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest) { glmc_mat3x4_mulv(mat3x4 m, vec3 v, vec4 dest) {
glm_mat3x4_mulv(m, v, dest); glm_mat3x4_mulv(m, v, dest);
} }

View File

@@ -28,13 +28,13 @@ glmc_mat4x2_make(const float * __restrict src, mat4x2 dest) {
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest) { glmc_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat2 dest) {
glm_mat4x2_mul(m1, m2, dest); glm_mat4x2_mul(m1, m2, dest);
} }
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest) { glmc_mat4x2_mulv(mat4x2 m, vec4 v, vec2 dest) {
glm_mat4x2_mulv(m, v, dest); glm_mat4x2_mulv(m, v, dest);
} }

View File

@@ -28,13 +28,13 @@ glmc_mat4x3_make(const float * __restrict src, mat4x3 dest) {
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest) { glmc_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat3 dest) {
glm_mat4x3_mul(m1, m2, dest); glm_mat4x3_mul(m1, m2, dest);
} }
CGLM_EXPORT CGLM_EXPORT
void void
glmc_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest) { glmc_mat4x3_mulv(mat4x3 m, vec4 v, vec3 dest) {
glm_mat4x3_mulv(m, v, dest); glm_mat4x3_mulv(m, v, dest);
} }

View File

@@ -90,40 +90,40 @@ TEST_IMPL(GLM_PREFIX, mat3x4_mul) {
mat3x4 m1 = GLM_MAT3X4_ZERO_INIT; mat3x4 m1 = GLM_MAT3X4_ZERO_INIT;
mat4x3 m2 = GLM_MAT4X3_ZERO_INIT; mat4x3 m2 = GLM_MAT4X3_ZERO_INIT;
mat3 m3 = GLM_MAT3_ZERO_INIT; mat4 m3 = GLM_MAT4_ZERO_INIT;
mat3 m4 = GLM_MAT3_ZERO_INIT; mat4 m4 = GLM_MAT4_ZERO_INIT;
int i, j, k; int c, r, k;
test_rand_mat3x4(m1); test_rand_mat3x4(m1);
test_rand_mat4x3(m2); test_rand_mat4x3(m2);
for (i = 0; i < 3; i++) { for (r = 0; r < 4; r++) {
for (j = 0; j < 3; j++) { for (c = 0; c < 4; c++) {
for (k = 0; k < 4; k++) { for (k = 0; k < 3; k++) {
m4[i][j] += m1[i][k] * m2[k][j]; m4[c][r] += m1[k][r] * m2[c][k];
} }
} }
} }
GLM(mat3x4_mul)(m1, m2, m3); GLM(mat3x4_mul)(m1, m2, m3);
ASSERTIFY(test_assert_mat3_eq(m3, m4)) ASSERTIFY(test_assert_mat4_eq(m3, m4))
TEST_SUCCESS TEST_SUCCESS
} }
TEST_IMPL(GLM_PREFIX, mat3x4_mulv) { TEST_IMPL(GLM_PREFIX, mat3x4_mulv) {
mat3x4 mat = A_MATRIX3X4; mat3x4 mat = A_MATRIX3X4;
vec4 v = {11.0f, 21.0f, 31.0f, 41.0f}; vec4 v = {11.0f, 21.0f, 31.0f};
int i; int i;
vec3 dest; vec4 dest;
float res = 0.0; float res = 0.0;
GLM(mat3x4_mulv)(mat, v, dest); GLM(mat3x4_mulv)(mat, v, dest);
for (i = 0; i < 3; i++) { for (i = 0; i < 4; i++) {
res = mat[i][0] * v[0] + mat[i][1] * v[1] + mat[i][2] * v[2]; res = mat[0][i] * v[0] + mat[1][i] * v[1] + mat[2][i] * v[2];
ASSERT(test_eq(dest[i], res)) ASSERT(test_eq(dest[i], res))
} }

View File

@@ -87,40 +87,40 @@ TEST_IMPL(GLM_PREFIX, mat4x2_mul) {
mat4x2 m1 = GLM_MAT4X2_ZERO_INIT; mat4x2 m1 = GLM_MAT4X2_ZERO_INIT;
mat2x4 m2 = GLM_MAT2X4_ZERO_INIT; mat2x4 m2 = GLM_MAT2X4_ZERO_INIT;
mat4 m3 = GLM_MAT4_ZERO_INIT; mat2 m3 = GLM_MAT2_ZERO_INIT;
mat4 m4 = GLM_MAT4_ZERO_INIT; mat2 m4 = GLM_MAT2_ZERO_INIT;
int i, j, k; int c, r, k;
test_rand_mat4x2(m1); test_rand_mat4x2(m1);
test_rand_mat2x4(m2); test_rand_mat2x4(m2);
for (i = 0; i < 4; i++) { for (r = 0; r < 2; r++) {
for (j = 0; j < 4; j++) { for (c = 0; c < 2; c++) {
for (k = 0; k < 2; k++) { for (k = 0; k < 4; k++) {
m4[i][j] += m1[i][k] * m2[k][j]; m4[c][r] += m1[k][r] * m2[c][k];
} }
} }
} }
GLM(mat4x2_mul)(m1, m2, m3); GLM(mat4x2_mul)(m1, m2, m3);
ASSERTIFY(test_assert_mat4_eq(m3, m4)) ASSERTIFY(test_assert_mat2_eq(m3, m4))
TEST_SUCCESS TEST_SUCCESS
} }
TEST_IMPL(GLM_PREFIX, mat4x2_mulv) { TEST_IMPL(GLM_PREFIX, mat4x2_mulv) {
mat4x2 mat = A_MATRIX4X2; mat4x2 mat = A_MATRIX4X2;
vec2 v = {11.0f, 21.0f}; vec4 v = {11.0f, 21.0f, 31.0f, 41.0f};
int i; int i;
vec4 dest; vec2 dest;
float res = 0.0; float res = 0.0;
GLM(mat4x2_mulv)(mat, v, dest); GLM(mat4x2_mulv)(mat, v, dest);
for (i = 0; i < 4; i++) { for (i = 0; i < 2; i++) {
res = mat[i][0] * v[0] + mat[i][1] * v[1]; res = mat[0][i] * v[0] + mat[1][i] * v[1] + mat[2][i] * v[2] + mat[3][i] * v[3];
ASSERT(test_eq(dest[i], res)) ASSERT(test_eq(dest[i], res))
} }

View File

@@ -91,40 +91,40 @@ TEST_IMPL(GLM_PREFIX, mat4x3_mul) {
mat4x3 m1 = GLM_MAT4X3_ZERO_INIT; mat4x3 m1 = GLM_MAT4X3_ZERO_INIT;
mat3x4 m2 = GLM_MAT3X4_ZERO_INIT; mat3x4 m2 = GLM_MAT3X4_ZERO_INIT;
mat4 m3 = GLM_MAT4_ZERO_INIT; mat3 m3 = GLM_MAT3_ZERO_INIT;
mat4 m4 = GLM_MAT4_ZERO_INIT; mat3 m4 = GLM_MAT3_ZERO_INIT;
int i, j, k; int c, r, k;
test_rand_mat4x3(m1); test_rand_mat4x3(m1);
test_rand_mat3x4(m2); test_rand_mat3x4(m2);
for (i = 0; i < 4; i++) { for (r = 0; r < 3; r++) {
for (j = 0; j < 4; j++) { for (c = 0; c < 3; c++) {
for (k = 0; k < 3; k++) { for (k = 0; k < 4; k++) {
m4[i][j] += m1[i][k] * m2[k][j]; m4[c][r] += m1[k][r] * m2[c][k];
} }
} }
} }
GLM(mat4x3_mul)(m1, m2, m3); GLM(mat4x3_mul)(m1, m2, m3);
ASSERTIFY(test_assert_mat4_eq(m3, m4)) ASSERTIFY(test_assert_mat3_eq(m3, m4))
TEST_SUCCESS TEST_SUCCESS
} }
TEST_IMPL(GLM_PREFIX, mat4x3_mulv) { TEST_IMPL(GLM_PREFIX, mat4x3_mulv) {
mat4x3 mat = A_MATRIX4X3; mat4x3 mat = A_MATRIX4X3;
vec3 v = {11.0f, 21.0f, 31.0f}; vec4 v = {11.0f, 21.0f, 31.0f, 41.0f};
int i; int i;
vec4 dest; vec3 dest;
float res = 0.0; float res = 0.0;
GLM(mat4x3_mulv)(mat, v, dest); GLM(mat4x3_mulv)(mat, v, dest);
for (i = 0; i < 4; i++) { for (i = 0; i < 3; i++) {
res = mat[i][0] * v[0] + mat[i][1] * v[1] + mat[i][2] * v[2]; res = mat[0][i] * v[0] + mat[1][i] * v[1] + mat[2][i] * v[2] + mat[3][i] * v[3];
ASSERT(test_eq(dest[i], res)) ASSERT(test_eq(dest[i], res))
} }