Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add new matrix mat2x3 #330

Merged
merged 1 commit into from
Jul 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ add_library(${PROJECT_NAME}
src/vec4.c
src/ivec4.c
src/mat2.c
src/mat2x3.c
src/mat3.c
src/mat4.c
src/plane.c
Expand Down
4 changes: 4 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ cglm_HEADERS = include/cglm/version.h \
include/cglm/mat4.h \
include/cglm/mat3.h \
include/cglm/mat2.h \
include/cglm/mat2x3.h \
include/cglm/affine-pre.h \
include/cglm/affine-post.h \
include/cglm/affine.h \
Expand Down Expand Up @@ -96,6 +97,7 @@ cglm_calldir=$(includedir)/cglm/call
cglm_call_HEADERS = include/cglm/call/mat4.h \
include/cglm/call/mat3.h \
include/cglm/call/mat2.h \
include/cglm/call/mat2x3.h \
include/cglm/call/vec2.h \
include/cglm/call/vec3.h \
include/cglm/call/vec4.h \
Expand Down Expand Up @@ -160,6 +162,7 @@ cglm_structdir=$(includedir)/cglm/struct
cglm_struct_HEADERS = include/cglm/struct/mat4.h \
include/cglm/struct/mat3.h \
include/cglm/struct/mat2.h \
include/cglm/struct/mat2x3.h \
include/cglm/struct/affine-pre.h \
include/cglm/struct/affine-post.h \
include/cglm/struct/affine-mat.h \
Expand Down Expand Up @@ -212,6 +215,7 @@ libcglm_la_SOURCES=\
src/vec4.c \
src/ivec4.c \
src/mat2.c \
src/mat2x3.c \
src/mat3.c \
src/mat4.c \
src/plane.c \
Expand Down
1 change: 1 addition & 0 deletions docs/source/api_inline_array.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ Follow the :doc:`build` documentation for this
quat
euler
mat2
mat2x3
mat3
mat4
vec2
Expand Down
31 changes: 31 additions & 0 deletions docs/source/mat2x3.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
.. default-domain:: C

mat2x3
======

Header: cglm/mat2x3.h

Table of contents (click to go):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Macros:

1. GLM_MAT2X3_ZERO_INIT
#. GLM_MAT2x3_ZERO

Functions:

1. :c:func:`glm_mat2x3_make`

Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~

.. c:function:: void glm_mat2x3_make(float * __restrict src, mat2x3 dest)
Create mat2x3 matrix from pointer
| NOTE: **@src** must contain at least 6 elements.
Parameters:
| *[in]* **src** pointer to an array of floats
| *[out]* **dest** destination matrix2x3
1 change: 1 addition & 0 deletions include/cglm/call.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ extern "C" {
#include "call/ivec3.h"
#include "call/ivec4.h"
#include "call/mat2.h"
#include "call/mat2x3.h"
#include "call/mat3.h"
#include "call/mat4.h"
#include "call/affine.h"
Expand Down
23 changes: 23 additions & 0 deletions include/cglm/call/mat2x3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/

#ifndef cglmc_mat2x3_h
#define cglmc_mat2x3_h
#ifdef __cplusplus
extern "C" {
#endif

#include "../cglm.h"

CGLM_EXPORT
void
glmc_mat2x3_make(float * __restrict src, mat2x3 dest);

#ifdef __cplusplus
}
#endif
#endif /* cglmc_mat2x3_h */
1 change: 1 addition & 0 deletions include/cglm/cglm.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "mat4.h"
#include "mat3.h"
#include "mat2.h"
#include "mat2x3.h"
#include "affine.h"
#include "cam.h"
#include "frustum.h"
Expand Down
45 changes: 45 additions & 0 deletions include/cglm/mat2x3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/

/*
Macros:
GLM_MAT2X3_ZERO_INIT
GLM_MAT2X3_ZERO

Functions:
CGLM_INLINE void glm_mat2x3_make(float * restrict src, mat2x3 dest)
*/

#ifndef cglm_mat2x3_h
#define cglm_mat2x3_h

#include "common.h"

#define GLM_MAT2X3_ZERO_INIT {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}

/* for C only */
#define GLM_MAT2X3_ZERO ((mat2x3)GLM_MAT2X3_ZERO_INIT)

/*!
* @brief Create mat2x3 matrix from pointer
*
* @param[in] src pointer to an array of floats
* @param[out] dest matrix
*/
CGLM_INLINE
void
glm_mat2x3_make(float * __restrict src, mat2x3 dest) {
dest[0][0] = src[0];
dest[0][1] = src[1];
dest[0][2] = src[2];

dest[1][0] = src[3];
dest[1][1] = src[4];
dest[1][2] = src[5];
}

#endif
1 change: 1 addition & 0 deletions include/cglm/struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ extern "C" {
#include "struct/vec3.h"
#include "struct/vec4.h"
#include "struct/mat2.h"
#include "struct/mat2x3.h"
#include "struct/mat3.h"
#include "struct/mat4.h"
#include "struct/affine.h"
Expand Down
46 changes: 46 additions & 0 deletions include/cglm/struct/mat2x3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/

/*
Macros:
GLMS_MAT2X3_ZERO_INIT
GLMS_MAT2X3_ZERO
Functions:
CGLM_INLINE float glms_mat2x3_make(float * __restrict src);
*/

#ifndef cglms_mat2x3_h
#define cglms_mat2x3_h

#include "../common.h"
#include "../types-struct.h"
#include "../mat2x3.h"

/* api definition */
#define glms_mat2x3_(NAME) CGLM_STRUCTAPI(mat2x3, NAME)

#define GLMS_MAT2X3_ZERO_INIT {GLM_MAT2X3_ZERO_INIT}

/* for C only */
#define GLMS_MAT2X3_ZERO ((mat2x3s)GLMS_MAT2X3_ZERO_INIT)

/*!
* @brief Create mat2x3 matrix from pointer
*
* @param[in] src pointer to an array of floats
* @return constructed matrix from raw pointer
*/
CGLM_INLINE
mat2x3s
glms_mat2x3_(make)(float * __restrict src) {
mat2x3s r;
glm_mat2x3_make(src, r.raw);
return r;
}

#endif /* cglms_mat2x3_h */
11 changes: 11 additions & 0 deletions include/cglm/types-struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,17 @@ typedef union mat2s {
#endif
} mat2s;

typedef union mat2x3s {
mat2x3 raw;
vec3s col[2]; /* col -> row | [row (2), col (3)] */
#if CGLM_USE_ANONYMOUS_STRUCT
struct {
float m00, m01, m02;
float m10, m11, m12;
};
#endif
} mat2x3s;

typedef union mat3s {
mat3 raw;
vec3s col[3];
Expand Down
1 change: 1 addition & 0 deletions include/cglm/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ typedef CGLM_ALIGN_IF(16) float vec4[4];
typedef vec4 versor; /* |x, y, z, w| -> w is the last */
typedef vec3 mat3[3];
typedef CGLM_ALIGN_IF(16) vec2 mat2[2];
typedef vec3 mat2x3[2]; /* [row (2), col (3)] */
typedef CGLM_ALIGN_MAT vec4 mat4[4];

/*
Expand Down
1 change: 1 addition & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ cglm_src = files(
'src/vec4.c',
'src/ivec4.c',
'src/mat2.c',
'src/mat2x3.c',
'src/mat3.c',
'src/mat4.c',
'src/plane.c',
Expand Down
15 changes: 15 additions & 0 deletions src/mat2x3.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/

#include "../include/cglm/cglm.h"
#include "../include/cglm/call.h"

CGLM_EXPORT
void
glmc_mat2x3_make(float * __restrict src, mat2x3 dest) {
glm_mat2x3_make(src, dest);
}
13 changes: 13 additions & 0 deletions test/src/test_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,19 @@ test_assert_mat2_eq_zero(mat2 m2) {
TEST_SUCCESS
}

test_status_t
test_assert_mat2x3_eq_zero(mat2x3 m2x3) {
int i, j;

for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
ASSERT(test_eq(m2x3[i][j], 0.0f))
}
}

TEST_SUCCESS
}

test_status_t
test_assert_mat3_eq(mat3 m1, mat3 m2) {
int i, j;
Expand Down
3 changes: 3 additions & 0 deletions test/src/test_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ test_assert_mat2_eq_identity(mat2 m2);
test_status_t
test_assert_mat2_eq_zero(mat2 m2);

test_status_t
test_assert_mat2x3_eq_zero(mat2x3 m2x3);

test_status_t
test_assert_mat3_eq(mat3 m1, mat3 m2);

Expand Down
53 changes: 53 additions & 0 deletions test/src/test_mat2x3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/

#include "test_common.h"

#ifndef CGLM_TEST_MAT2X3_ONCE
#define CGLM_TEST_MAT2X3_ONCE

TEST_IMPL(MACRO_GLM_MAT2X3_ZERO_INIT) {
mat2x3 m = GLM_MAT2X3_ZERO_INIT;

ASSERT(test_eq(m[0][0], 0.0f))
ASSERT(test_eq(m[0][1], 0.0f))
ASSERT(test_eq(m[0][2], 0.0f))
ASSERT(test_eq(m[1][0], 0.0f))
ASSERT(test_eq(m[1][1], 0.0f))
ASSERT(test_eq(m[1][2], 0.0f))

TEST_SUCCESS
}

#endif /* CGLM_TEST_MAT2X3_ONCE */

TEST_IMPL(GLM_PREFIX, mat2x3_make) {
float src[18] = {
0.5f, 1.7f, 10.3f, 4.2f, 8.9f, 1.1f,
2.3f, 4.2f, 66.5f, 23.7f, 6.6f, 8.9f,
5.3f, 4.8f, 96.3f, 13.7f, 4.7f, 5.5f
};

mat2x3 dest[3];

float *srcp = src;
unsigned int i, j, k;

for (i = 0, j = 0, k = 0; i < sizeof(src) / sizeof(float); i+=6,j++) {
GLM(mat2x3_make)(srcp + i, dest[j]);

ASSERT(test_eq(src[ i ], dest[j][k][0]));
ASSERT(test_eq(src[i+1], dest[j][k][1]));
ASSERT(test_eq(src[i+2], dest[j][k][2]));

ASSERT(test_eq(src[i+3], dest[j][k+1][0]));
ASSERT(test_eq(src[i+4], dest[j][k+1][1]));
ASSERT(test_eq(src[i+5], dest[j][k+1][2]));
}

TEST_SUCCESS
}
8 changes: 8 additions & 0 deletions test/src/test_struct.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@

#include "test_common.h"

TEST_IMPL(mat2x3s_zero_init) {
mat2x3s mat2x3_zero = GLMS_MAT2X3_ZERO_INIT;
mat2x3 mat2x3_zero_a = GLM_MAT2X3_ZERO_INIT;
test_assert_mat2x3_eq_zero(mat2x3_zero_a);
test_assert_mat2x3_eq_zero(mat2x3_zero.raw);
TEST_SUCCESS
}

TEST_IMPL(mat3s_identity_init) {
mat3s mat3_identity = GLMS_MAT3_IDENTITY_INIT;
mat3 mat3_identity_a = GLM_MAT3_IDENTITY_INIT;
Expand Down
2 changes: 2 additions & 0 deletions test/src/tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "test_ivec3.h"
#include "test_ivec4.h"
#include "test_mat2.h"
#include "test_mat2x3.h"
#include "test_mat3.h"
#include "test_mat4.h"
#include "test_quat.h"
Expand Down Expand Up @@ -50,6 +51,7 @@
#include "test_ivec3.h"
#include "test_ivec4.h"
#include "test_mat2.h"
#include "test_mat2x3.h"
#include "test_mat3.h"
#include "test_mat4.h"
#include "test_quat.h"
Expand Down
Loading