mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87092e6849 | ||
|
|
89ced4166a | ||
|
|
6080099434 | ||
|
|
f3735c9036 | ||
|
|
2242e9a5e1 | ||
|
|
a12364d486 | ||
|
|
b133c2e3e3 | ||
|
|
0127d30fa8 | ||
|
|
9b13b2f872 | ||
|
|
40d903c2bc | ||
|
|
06016220c0 | ||
|
|
bb751d32ca | ||
|
|
6dc37f6cc9 | ||
|
|
5ff42799b2 | ||
|
|
2326e627b5 | ||
|
|
c18fe8098f | ||
|
|
a9ed8470b4 | ||
|
|
332087da61 | ||
|
|
56c43d7a74 | ||
|
|
649f390662 | ||
|
|
0818bbdf51 | ||
|
|
edd1517f85 | ||
|
|
d0c2e8233c | ||
|
|
87837aa074 | ||
|
|
62ab6c56c0 | ||
|
|
a2985aa444 | ||
|
|
7274cee153 |
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.8.2)
|
cmake_minimum_required(VERSION 3.8.2)
|
||||||
project(cglm VERSION 0.7.6 LANGUAGES C)
|
project(cglm VERSION 0.7.7 LANGUAGES C)
|
||||||
|
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED YES)
|
set(CMAKE_C_STANDARD_REQUIRED YES)
|
||||||
@@ -22,8 +22,16 @@ if(CGLM_USE_C99)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL -DCGLM_EXPORTS -DCGLM_DLL)
|
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL -DCGLM_EXPORTS -DCGLM_DLL)
|
||||||
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
||||||
|
|
||||||
|
# Ref: https://skia.googlesource.com/third_party/sdl/+/refs/heads/master/CMakeLists.txt#225
|
||||||
|
# Make sure /RTC1 is disabled, otherwise it will use functions from the CRT
|
||||||
|
foreach(flag_var
|
||||||
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||||
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||||
|
string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
|
||||||
|
endforeach(flag_var)
|
||||||
else()
|
else()
|
||||||
add_compile_options(-Wall -Werror -O3)
|
add_compile_options(-Wall -Werror -O3)
|
||||||
endif()
|
endif()
|
||||||
@@ -64,6 +72,7 @@ add_library(${PROJECT_NAME}
|
|||||||
src/curve.c
|
src/curve.c
|
||||||
src/bezier.c
|
src/bezier.c
|
||||||
src/ray.c
|
src/ray.c
|
||||||
|
src/affine2d.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
|||||||
19
Makefile.am
19
Makefile.am
@@ -21,7 +21,10 @@ checkLDFLAGS = -L./.libs \
|
|||||||
-lm \
|
-lm \
|
||||||
-lcglm
|
-lcglm
|
||||||
checkCFLAGS = $(AM_CFLAGS) \
|
checkCFLAGS = $(AM_CFLAGS) \
|
||||||
-I./include
|
-std=gnu11 \
|
||||||
|
-O3 \
|
||||||
|
-DCGLM_DEFINE_PRINTS \
|
||||||
|
-I./include
|
||||||
|
|
||||||
check_PROGRAMS = test/tests
|
check_PROGRAMS = test/tests
|
||||||
TESTS = $(check_PROGRAMS)
|
TESTS = $(check_PROGRAMS)
|
||||||
@@ -63,7 +66,8 @@ cglm_HEADERS = include/cglm/version.h \
|
|||||||
include/cglm/curve.h \
|
include/cglm/curve.h \
|
||||||
include/cglm/bezier.h \
|
include/cglm/bezier.h \
|
||||||
include/cglm/applesimd.h \
|
include/cglm/applesimd.h \
|
||||||
include/cglm/ray.h
|
include/cglm/ray.h \
|
||||||
|
include/cglm/affine2d.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 \
|
||||||
@@ -85,7 +89,8 @@ cglm_call_HEADERS = include/cglm/call/mat4.h \
|
|||||||
include/cglm/call/ease.h \
|
include/cglm/call/ease.h \
|
||||||
include/cglm/call/curve.h \
|
include/cglm/call/curve.h \
|
||||||
include/cglm/call/bezier.h \
|
include/cglm/call/bezier.h \
|
||||||
include/cglm/call/ray.h
|
include/cglm/call/ray.h \
|
||||||
|
include/cglm/call/affine2d.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 \
|
||||||
@@ -127,8 +132,9 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
|||||||
include/cglm/struct/project.h \
|
include/cglm/struct/project.h \
|
||||||
include/cglm/struct/sphere.h \
|
include/cglm/struct/sphere.h \
|
||||||
include/cglm/struct/color.h \
|
include/cglm/struct/color.h \
|
||||||
include/cglm/struct/curve.h
|
include/cglm/struct/curve.h \
|
||||||
|
include/cglm/struct/affine2d.h
|
||||||
|
|
||||||
libcglm_la_SOURCES=\
|
libcglm_la_SOURCES=\
|
||||||
src/euler.c \
|
src/euler.c \
|
||||||
src/affine.c \
|
src/affine.c \
|
||||||
@@ -149,7 +155,8 @@ libcglm_la_SOURCES=\
|
|||||||
src/ease.c \
|
src/ease.c \
|
||||||
src/curve.c \
|
src/curve.c \
|
||||||
src/bezier.c \
|
src/bezier.c \
|
||||||
src/ray.c
|
src/ray.c \
|
||||||
|
src/affine2d.c
|
||||||
|
|
||||||
test_tests_SOURCES=\
|
test_tests_SOURCES=\
|
||||||
test/runner.c \
|
test/runner.c \
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AC_INIT([cglm], [0.7.6], [info@recp.me])
|
AC_INIT([cglm], [0.7.7], [info@recp.me])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
||||||
|
|
||||||
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.. default-domain:: C
|
.. default-domain:: C
|
||||||
|
|
||||||
affine transform matrix (specialized functions)
|
3D Affine Transform Matrix (specialized functions)
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Header: cglm/affine-mat.h
|
Header: cglm/affine-mat.h
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.. default-domain:: C
|
.. default-domain:: C
|
||||||
|
|
||||||
affine transforms
|
3D Affine Transforms
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Header: cglm/affine.h
|
Header: cglm/affine.h
|
||||||
@@ -45,6 +45,8 @@ The implementation would be:
|
|||||||
glm_rotate(m, angle, axis);
|
glm_rotate(m, angle, axis);
|
||||||
glm_translate(m, pivotInv); /* pivotInv = -pivot */
|
glm_translate(m, pivotInv); /* pivotInv = -pivot */
|
||||||
|
|
||||||
|
.. _TransformsOrder:
|
||||||
|
|
||||||
Transforms Order
|
Transforms Order
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
140
docs/source/affine2d.rst
Normal file
140
docs/source/affine2d.rst
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
2D Affine Transforms
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Header: cglm/affine2d.h
|
||||||
|
|
||||||
|
2D Transforms uses `2d` suffix for naming. If there is no 2D suffix it is 3D function.
|
||||||
|
|
||||||
|
Initialize Transform Matrices
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Functions with **_make** prefix expect you don't have a matrix and they create
|
||||||
|
a matrix for you. You don't need to pass identity matrix.
|
||||||
|
|
||||||
|
But other functions expect you have a matrix and you want to transform them. If
|
||||||
|
you didn't have any existing matrix you have to initialize matrix to identity
|
||||||
|
before sending to transfrom functions.
|
||||||
|
|
||||||
|
Transforms Order
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
See :ref:`TransformsOrder` to read similar section.
|
||||||
|
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_translate2d`
|
||||||
|
#. :c:func:`glm_translate2d_to`
|
||||||
|
#. :c:func:`glm_translate2d_x`
|
||||||
|
#. :c:func:`glm_translate2d_y`
|
||||||
|
#. :c:func:`glm_translate2d_make`
|
||||||
|
#. :c:func:`glm_scale2d_to`
|
||||||
|
#. :c:func:`glm_scale2d_make`
|
||||||
|
#. :c:func:`glm_scale2d`
|
||||||
|
#. :c:func:`glm_scale2d_uni`
|
||||||
|
#. :c:func:`glm_rotate2d_make`
|
||||||
|
#. :c:func:`glm_rotate2d`
|
||||||
|
#. :c:func:`glm_rotate2d_to`
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate2d(mat3 m, vec2 v)
|
||||||
|
|
||||||
|
translate existing 2d transform matrix by *v* vector and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** 2d affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate2d_to(mat3 m, vec2 v, mat3 dest)
|
||||||
|
|
||||||
|
translate existing 2d transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** 2d affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
| *[out]* **dest** translated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate2d_x(mat3 m, float x)
|
||||||
|
|
||||||
|
translate existing 2d transform matrix by x factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** 2d affine transfrom
|
||||||
|
| *[in]* **x** x factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate2d_y(mat3 m, float y)
|
||||||
|
|
||||||
|
translate existing 2d transform matrix by y factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** 2d affine transfrom
|
||||||
|
| *[in]* **y** y factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate2d_make(mat3 m, vec2 v)
|
||||||
|
|
||||||
|
creates NEW translate 2d transform matrix by *v* vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale2d_to(mat3 m, vec2 v, mat3 dest)
|
||||||
|
|
||||||
|
scale existing 2d transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y]
|
||||||
|
| *[out]* **dest** scaled matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale2d_make(mat3 m, vec2 v)
|
||||||
|
|
||||||
|
creates NEW 2d scale matrix by *v* vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale2d(mat3 m, vec2 v)
|
||||||
|
|
||||||
|
scales existing 2d transform matrix by *v* vector and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale2d_uni(mat3 m, float s)
|
||||||
|
|
||||||
|
applies uniform scale to existing 2d transform matrix v = [s, s] and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **s** scale factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate2d_make(mat3 m, float angle)
|
||||||
|
|
||||||
|
creates NEW rotation matrix by angle around *Z* axis
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate2d(mat3 m, float angle)
|
||||||
|
|
||||||
|
rotate existing 2d transform matrix around *Z* axis by angle and store result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate2d_to(mat3 m, float angle, mat3 dest)
|
||||||
|
|
||||||
|
rotate existing 2d transform matrix around *Z* axis by angle and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[out]* **dest** rotated matrix
|
||||||
@@ -28,6 +28,7 @@ Follow the :doc:`build` documentation for this
|
|||||||
|
|
||||||
affine
|
affine
|
||||||
affine-mat
|
affine-mat
|
||||||
|
affine2d
|
||||||
cam
|
cam
|
||||||
frustum
|
frustum
|
||||||
box
|
box
|
||||||
|
|||||||
@@ -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.7.6'
|
version = u'0.7.7'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.7.6'
|
release = u'0.7.7'
|
||||||
|
|
||||||
# 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.
|
||||||
|
|||||||
@@ -156,16 +156,22 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** mat4 (left)
|
| *[in]* **m** mat4 (left)
|
||||||
| *[in]* **v** vec4 (right, column vector)
|
| *[in]* **v** vec4 (right, column vector)
|
||||||
|
| *[in]* **last** 4th item to make it vec4
|
||||||
| *[out]* **dest** vec4 (result, column vector)
|
| *[out]* **dest** vec4 (result, column vector)
|
||||||
|
|
||||||
.. c:function:: void glm_mat4_mulv3(mat4 m, vec3 v, vec3 dest)
|
.. c:function:: void glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest)
|
||||||
|
|
||||||
multiply vector with mat4's mat3 part(rotation)
|
| multiply **vec3** with **mat4** and get **vec3** as result
|
||||||
|
|
|
||||||
|
| actually the result is **vec4**, after multiplication,
|
||||||
|
the last component is trimmed, if you need the result's last component
|
||||||
|
then don't use this function and consider to use **glm_mat4_mulv()**
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** mat4 (left)
|
| *[in]* **m** mat4(affine transform)
|
||||||
| *[in]* **v** vec3 (right, column vector)
|
| *[in]* **v** vec3
|
||||||
| *[out]* **dest** vec3 (result, column vector)
|
| *[in]* **last** 4th item to make it vec4
|
||||||
|
| *[out]* **dest** result vector (vec3)
|
||||||
|
|
||||||
.. c:function:: void glm_mat4_trace(mat4 m)
|
.. c:function:: void glm_mat4_trace(mat4 m)
|
||||||
|
|
||||||
|
|||||||
268
include/cglm/affine2d.h
Normal file
268
include/cglm/affine2d.h
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_translate2d(mat3 m, vec2 v)
|
||||||
|
CGLM_INLINE void glm_translate2d_to(mat3 m, vec2 v, mat3 dest)
|
||||||
|
CGLM_INLINE void glm_translate2d_x(mat3 m, float x)
|
||||||
|
CGLM_INLINE void glm_translate2d_y(mat3 m, float y)
|
||||||
|
CGLM_INLINE void glm_translate2d_make(mat3 m, vec2 v)
|
||||||
|
CGLM_INLINE void glm_scale2d_to(mat3 m, vec2 v, mat3 dest)
|
||||||
|
CGLM_INLINE void glm_scale2d_make(mat3 m, vec2 v)
|
||||||
|
CGLM_INLINE void glm_scale2d(mat3 m, vec2 v)
|
||||||
|
CGLM_INLINE void glm_scale2d_uni(mat3 m, float s)
|
||||||
|
CGLM_INLINE void glm_rotate2d_make(mat3 m, float angle)
|
||||||
|
CGLM_INLINE void glm_rotate2d(mat3 m, float angle)
|
||||||
|
CGLM_INLINE void glm_rotate2d_to(mat3 m, float angle, mat3 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_affine2d_h
|
||||||
|
#define cglm_affine2d_h
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "vec2.h"
|
||||||
|
#include "mat3.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate2d(mat3 m, vec2 v) {
|
||||||
|
m[2][0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0];
|
||||||
|
m[2][1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1];
|
||||||
|
m[2][2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by v vector
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* source matrix will remain same
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y]
|
||||||
|
* @param[out] dest translated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate2d_to(mat3 m, vec2 v, mat3 dest) {
|
||||||
|
glm_mat3_copy(m, dest);
|
||||||
|
glm_translate2d(dest, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by x factor
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] x x factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate2d_x(mat3 m, float x) {
|
||||||
|
m[2][0] = m[0][0] * x + m[2][0];
|
||||||
|
m[2][1] = m[0][1] * x + m[2][1];
|
||||||
|
m[2][2] = m[0][2] * x + m[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by y factor
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] y y factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate2d_y(mat3 m, float y) {
|
||||||
|
m[2][0] = m[1][0] * y + m[2][0];
|
||||||
|
m[2][1] = m[1][1] * y + m[2][1];
|
||||||
|
m[2][2] = m[1][2] * y + m[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW translate 2d transform matrix by v vector
|
||||||
|
*
|
||||||
|
* @param[out] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate2d_make(mat3 m, vec2 v) {
|
||||||
|
glm_mat3_identity(m);
|
||||||
|
m[2][0] = v[0];
|
||||||
|
m[2][1] = v[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief scale existing 2d transform matrix by v vector
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v scale vector [x, y]
|
||||||
|
* @param[out] dest scaled matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_scale2d_to(mat3 m, vec2 v, mat3 dest) {
|
||||||
|
dest[0][0] = m[0][0] * v[0];
|
||||||
|
dest[0][1] = m[0][1] * v[0];
|
||||||
|
dest[0][2] = m[0][2] * v[0];
|
||||||
|
|
||||||
|
dest[1][0] = m[1][0] * v[1];
|
||||||
|
dest[1][1] = m[1][1] * v[1];
|
||||||
|
dest[1][2] = m[1][2] * v[1];
|
||||||
|
|
||||||
|
dest[2][0] = m[2][0];
|
||||||
|
dest[2][1] = m[2][1];
|
||||||
|
dest[2][2] = m[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW 2d scale matrix by v vector
|
||||||
|
*
|
||||||
|
* @param[out] m affine transfrom
|
||||||
|
* @param[in] v scale vector [x, y]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_scale2d_make(mat3 m, vec2 v) {
|
||||||
|
glm_mat3_identity(m);
|
||||||
|
m[0][0] = v[0];
|
||||||
|
m[1][1] = v[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief scales existing 2d transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] v scale vector [x, y]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_scale2d(mat3 m, vec2 v) {
|
||||||
|
m[0][0] = m[0][0] * v[0];
|
||||||
|
m[0][1] = m[0][1] * v[0];
|
||||||
|
m[0][2] = m[0][2] * v[0];
|
||||||
|
|
||||||
|
m[1][0] = m[1][0] * v[1];
|
||||||
|
m[1][1] = m[1][1] * v[1];
|
||||||
|
m[1][2] = m[1][2] * v[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief applies uniform scale to existing 2d transform matrix v = [s, s]
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] s scale factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_scale2d_uni(mat3 m, float s) {
|
||||||
|
m[0][0] = m[0][0] * s;
|
||||||
|
m[0][1] = m[0][1] * s;
|
||||||
|
m[0][2] = m[0][2] * s;
|
||||||
|
|
||||||
|
m[1][0] = m[1][0] * s;
|
||||||
|
m[1][1] = m[1][1] * s;
|
||||||
|
m[1][2] = m[1][2] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW rotation matrix by angle around Z axis
|
||||||
|
*
|
||||||
|
* @param[out] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate2d_make(mat3 m, float angle) {
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
s = sinf(angle);
|
||||||
|
c = cosf(angle);
|
||||||
|
|
||||||
|
m[0][0] = c;
|
||||||
|
m[0][1] = s;
|
||||||
|
m[0][2] = 0;
|
||||||
|
|
||||||
|
m[1][0] = -s;
|
||||||
|
m[1][1] = c;
|
||||||
|
m[1][2] = 0;
|
||||||
|
|
||||||
|
m[2][0] = 0.0f;
|
||||||
|
m[2][1] = 0.0f;
|
||||||
|
m[2][2] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing 2d transform matrix around Z axis by angle
|
||||||
|
* and store result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate2d(mat3 m, float angle) {
|
||||||
|
float m00 = m[0][0], m10 = m[1][0],
|
||||||
|
m01 = m[0][1], m11 = m[1][1],
|
||||||
|
m02 = m[0][2], m12 = m[1][2];
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
s = sinf(angle);
|
||||||
|
c = cosf(angle);
|
||||||
|
|
||||||
|
m[0][0] = m00 * c + m10 * s;
|
||||||
|
m[0][1] = m01 * c + m11 * s;
|
||||||
|
m[0][2] = m02 * c + m12 * s;
|
||||||
|
|
||||||
|
m[1][0] = m00 * -s + m10 * c;
|
||||||
|
m[1][1] = m01 * -s + m11 * c;
|
||||||
|
m[1][2] = m02 * -s + m12 * c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing 2d transform matrix around Z axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate2d_to(mat3 m, float angle, mat3 dest) {
|
||||||
|
float m00 = m[0][0], m10 = m[1][0],
|
||||||
|
m01 = m[0][1], m11 = m[1][1],
|
||||||
|
m02 = m[0][2], m12 = m[1][2];
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
s = sinf(angle);
|
||||||
|
c = cosf(angle);
|
||||||
|
|
||||||
|
dest[0][0] = m00 * c + m10 * s;
|
||||||
|
dest[0][1] = m01 * c + m11 * s;
|
||||||
|
dest[0][2] = m02 * c + m12 * s;
|
||||||
|
|
||||||
|
dest[1][0] = m00 * -s + m10 * c;
|
||||||
|
dest[1][1] = m01 * -s + m11 * c;
|
||||||
|
dest[1][2] = m02 * -s + m12 * c;
|
||||||
|
|
||||||
|
dest[2][0] = m[2][0];
|
||||||
|
dest[2][1] = m[2][1];
|
||||||
|
dest[2][2] = m[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_affine2d_h */
|
||||||
@@ -32,6 +32,7 @@ extern "C" {
|
|||||||
#include "call/curve.h"
|
#include "call/curve.h"
|
||||||
#include "call/bezier.h"
|
#include "call/bezier.h"
|
||||||
#include "call/ray.h"
|
#include "call/ray.h"
|
||||||
|
#include "call/affine2d.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
67
include/cglm/call/affine2d.h
Normal file
67
include/cglm/call/affine2d.h
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_affine2d_h
|
||||||
|
#define cglmc_affine2d_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_make(mat3 m, vec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_to(mat3 m, vec2 v, mat3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d(mat3 m, vec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_x(mat3 m, float to);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_y(mat3 m, float to);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d_to(mat3 m, vec2 v, mat3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d_make(mat3 m, vec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d(mat3 m, vec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d_uni(mat3 m, float s);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotate2d_make(mat3 m, float angle);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotate2d(mat3 m, float angle);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotate2d_to(mat3 m, float angle, mat3 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_affine2d_h */
|
||||||
@@ -31,5 +31,6 @@
|
|||||||
#include "curve.h"
|
#include "curve.h"
|
||||||
#include "bezier.h"
|
#include "bezier.h"
|
||||||
#include "ray.h"
|
#include "ray.h"
|
||||||
|
#include "affine2d.h"
|
||||||
|
|
||||||
#endif /* cglm_h */
|
#endif /* cglm_h */
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2_copy(mat2 mat, mat2 dest) {
|
glm_mat2_copy(mat2 mat, mat2 dest) {
|
||||||
glm_vec4_copy(mat[0], dest[0]);
|
glm_vec4_ucopy(mat[0], dest[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -216,7 +216,16 @@ glm_mat2_trace(mat2 m) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2_scale(mat2 m, float s) {
|
glm_mat2_scale(mat2 m, float s) {
|
||||||
glm_vec4_scale(m[0], s, m[0]);
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
|
glmm_store(m[0], _mm_mul_ps(_mm_loadu_ps(m[0]), _mm_set1_ps(s)));
|
||||||
|
#elif defined(CGLM_NEON_FP)
|
||||||
|
vst1q_f32(m[0], vmulq_f32(vld1q_f32(m[0]), vdupq_n_f32(s)));
|
||||||
|
#else
|
||||||
|
m[0][0] = m[0][0] * s;
|
||||||
|
m[0][1] = m[0][1] * s;
|
||||||
|
m[1][0] = m[1][0] * s;
|
||||||
|
m[1][1] = m[1][1] * s;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -228,9 +228,11 @@ glm_mat3_transpose(mat3 m) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_mulv(mat3 m, 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];
|
vec3 res;
|
||||||
dest[1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2];
|
res[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2];
|
||||||
dest[2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2];
|
res[1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2];
|
||||||
|
res[2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2];
|
||||||
|
glm_vec3_copy(res, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ extern "C" {
|
|||||||
#include "struct/project.h"
|
#include "struct/project.h"
|
||||||
#include "struct/sphere.h"
|
#include "struct/sphere.h"
|
||||||
#include "struct/curve.h"
|
#include "struct/curve.h"
|
||||||
|
#include "struct/affine2d.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
177
include/cglm/struct/affine2d.h
Normal file
177
include/cglm/struct/affine2d.h
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat3s glms_translate2d(mat3 m, vec2 v)
|
||||||
|
CGLM_INLINE mat3s glms_translate2d_x(mat3s m, float x)
|
||||||
|
CGLM_INLINE mat3s glms_translate2d_y(mat3s m, float y)
|
||||||
|
CGLM_INLINE mat3s glms_translate2d_make(vec2s v)
|
||||||
|
CGLM_INLINE mat3s glms_scale2d_make(vec2s v)
|
||||||
|
CGLM_INLINE mat3s glms_scale2d(mat3s m, vec2s v)
|
||||||
|
CGLM_INLINE mat3s glms_scale2d_uni(mat3s m, float s)
|
||||||
|
CGLM_INLINE mat3s glms_rotate2d_make(float angle)
|
||||||
|
CGLM_INLINE mat3s glms_rotate2d(mat3s m, float angle)
|
||||||
|
CGLM_INLINE mat3s glms_rotate2d_to(mat3s m, float angle)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_affine2ds_h
|
||||||
|
#define cglms_affine2ds_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../types-struct.h"
|
||||||
|
#include "../affine2d.h"
|
||||||
|
#include "vec3.h"
|
||||||
|
#include "mat3.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y]
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_translate2d(mat3s m, vec2s v) {
|
||||||
|
glm_translate2d(m.raw, v.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by x factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] x x factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_translate2d_x(mat3s m, float x) {
|
||||||
|
glm_translate2d_x(m.raw, x);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 2d transform matrix by y factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] y y factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_translate2d_y(mat3s m, float y) {
|
||||||
|
glm_translate2d_y(m.raw, y);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW translate 2d transform matrix by v vector
|
||||||
|
*
|
||||||
|
* @param[in] v translate vector [x, y]
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_translate2d_make(vec2s v) {
|
||||||
|
mat3s m;
|
||||||
|
glm_translate2d_make(m.raw, v.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW 2d scale matrix by v vector
|
||||||
|
*
|
||||||
|
* @param[in] v scale vector [x, y]
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_scale2d_make(vec2s v) {
|
||||||
|
mat3s m;
|
||||||
|
glm_scale2d_make(m.raw, v.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief scales existing 2d transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v scale vector [x, y, z]
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_scale2d(mat3s m, vec2s v) {
|
||||||
|
mat3s r;
|
||||||
|
glm_scale2d_to(m.raw, v.raw, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief applies uniform scale to existing 2d transform matrix v = [s, s, s]
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] s scale factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_scale2d_uni(mat3s m, float s) {
|
||||||
|
glm_scale2d_uni(m.raw, s);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW 2d rotation matrix by angle and axis
|
||||||
|
*
|
||||||
|
* axis will be normalized so you don't need to normalize it
|
||||||
|
*
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_rotate2d_make(float angle) {
|
||||||
|
mat3s m;
|
||||||
|
glm_rotate2d_make(m.raw, angle);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing 2d transform matrix around given axis by angle
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_rotate2d(mat3s m, float angle) {
|
||||||
|
glm_rotate2d(m.raw, angle);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing 2d transform matrix around given axis by angle
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat3s
|
||||||
|
glms_rotate2d_to(mat3s m, float angle) {
|
||||||
|
glm_rotate2d(m.raw, angle);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_affine2ds_h */
|
||||||
@@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
#define CGLM_VERSION_MAJOR 0
|
#define CGLM_VERSION_MAJOR 0
|
||||||
#define CGLM_VERSION_MINOR 7
|
#define CGLM_VERSION_MINOR 7
|
||||||
#define CGLM_VERSION_PATCH 6
|
#define CGLM_VERSION_PATCH 7
|
||||||
|
|
||||||
#endif /* cglm_version_h */
|
#endif /* cglm_version_h */
|
||||||
|
|||||||
81
src/affine2d.c
Normal file
81
src/affine2d.c
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../include/cglm/cglm.h"
|
||||||
|
#include "../include/cglm/call.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_make(mat3 m, vec2 v) {
|
||||||
|
glm_translate2d_make(m, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_to(mat3 m, vec2 v, mat3 dest) {
|
||||||
|
glm_translate2d_to(m, v, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d(mat3 m, vec2 v) {
|
||||||
|
glm_translate2d(m, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_x(mat3 m, float to) {
|
||||||
|
glm_translate2d_x(m, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translate2d_y(mat3 m, float to) {
|
||||||
|
glm_translate2d_y(m, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d_to(mat3 m, vec2 v, mat3 dest) {
|
||||||
|
glm_scale2d_to(m, v, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d_make(mat3 m, vec2 v) {
|
||||||
|
glm_scale2d_make(m, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d(mat3 m, vec2 v) {
|
||||||
|
glm_scale2d(m, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_scale2d_uni(mat3 m, float s) {
|
||||||
|
glm_scale2d_uni(m, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotate2d_make(mat3 m, float angle) {
|
||||||
|
glm_rotate2d_make(m, angle);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotate2d(mat3 m, float angle) {
|
||||||
|
glm_rotate2d(m, angle);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotate2d_to(mat3 m, float angle, mat3 dest) {
|
||||||
|
glm_rotate2d_to(m, angle, dest);
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@ set(TEST_MAIN tests)
|
|||||||
set(TEST_RUNNER_PARAMS "")
|
set(TEST_RUNNER_PARAMS "")
|
||||||
|
|
||||||
add_executable(${TEST_MAIN} ${TESTFILES})
|
add_executable(${TEST_MAIN} ${TESTFILES})
|
||||||
|
target_compile_definitions(${TEST_MAIN} PRIVATE CGLM_DEFINE_PRINTS=1)
|
||||||
|
|
||||||
target_link_libraries(${TEST_MAIN} PRIVATE cglm m)
|
target_link_libraries(${TEST_MAIN} PRIVATE cglm m)
|
||||||
target_include_directories(${TEST_MAIN} PRIVATE
|
target_include_directories(${TEST_MAIN} PRIVATE
|
||||||
|
|||||||
310
test/src/test_affine2d.h
Normal file
310
test/src/test_affine2d.h
Normal file
@@ -0,0 +1,310 @@
|
|||||||
|
/*
|
||||||
|
* 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"
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, translate2d) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d)(m1, (vec2){13.0f, 11.0f});
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 15.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 14.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d)(m1, (vec2){1.0f, -1.0f});
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 16.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 13.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, translate2d_to) {
|
||||||
|
mat3 m1, m2;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_to)(m1, (vec2){13.0f, 11.0f}, m2);
|
||||||
|
glm_mat3_mulv(m2, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 15.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 14.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_to)(m1, (vec2){1.0f, -1.0f}, m2);
|
||||||
|
glm_mat3_mulv(m2, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 16.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 13.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, translate2d_x) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_x)(m1, 13.0f);
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 15.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 3.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_x)(m1, -1.0f);
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 14.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 3.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, translate2d_y) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_y)(m1, 11.0f);
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 2.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 14.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_y)(m1, -1.0f);
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 2.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 13.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, translate2d_make) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_make)(m1, (vec2){13.0f, 11.0f});
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 15.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 14.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(translate2d_make)(m1, (vec2){-1.0f, -5.0f});
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 14.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 9.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, scale2d_to) {
|
||||||
|
mat3 m1, m2;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(scale2d_to)(m1, (vec2){13.0f, 11.0f}, m2);
|
||||||
|
glm_mat3_mulv(m2, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 33.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(scale2d_to)(m1, (vec2){-1.0f, -5.0f}, m2);
|
||||||
|
glm_mat3_mulv(m2, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], -26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], -165.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, scale2d_make) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
GLM(scale2d_make)(m1, (vec2){13.0f, 11.0f});
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 33.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
GLM(scale2d_make)(m1, (vec3){-1.0f, -5.0f});
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], -26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], -165.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, scale2d) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(scale2d)(m1, (vec2){13.0f, 11.0f});
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 33.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(scale2d)(m1, (vec2){-1.0f, -5.0f});
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], -26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], -165.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, scale2d_uni) {
|
||||||
|
mat3 m1;
|
||||||
|
vec3 v1 = {2.0f, 3.0f, 1.0f}, v2;
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(scale2d_uni)(m1, 13.0f);
|
||||||
|
glm_mat3_mulv(m1, v1, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], 26.0f))
|
||||||
|
ASSERT(test_eq(v2[1], 39.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
glm_mat3_identity(m1);
|
||||||
|
GLM(scale2d_uni)(m1, -5.0f);
|
||||||
|
glm_mat3_mulv(m1, v2, v2);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v2[0], -130.0f))
|
||||||
|
ASSERT(test_eq(v2[1], -195.0f))
|
||||||
|
ASSERT(test_eq(v2[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, rotate2d_make) {
|
||||||
|
mat3 m1 = GLM_MAT3_IDENTITY_INIT;
|
||||||
|
vec3 v1 = {0.0f, 1.0f, 1.0f}, v2 = {0.0f, 1.0f, 1.0f};
|
||||||
|
|
||||||
|
GLM(rotate2d_make)(m1, GLM_PI_2f);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], -1.0f))
|
||||||
|
ASSERT(test_eq(v1[1], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
glm_vec3_copy(v2, v1);
|
||||||
|
|
||||||
|
GLM(rotate2d_make)(m1, -GLM_PI_2f);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], 1.0f))
|
||||||
|
ASSERT(test_eq(v1[1], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
glm_vec3_copy(v2, v1);
|
||||||
|
|
||||||
|
GLM(rotate2d_make)(m1, GLM_PIf);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[1], -1.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, rotate2d) {
|
||||||
|
mat3 m1 = GLM_MAT3_IDENTITY_INIT;
|
||||||
|
vec3 v1 = {0.0f, 1.0f, 1.0f}, v2 = {0.0f, 1.0f, 1.0f};
|
||||||
|
|
||||||
|
GLM(rotate2d)(m1, GLM_PI_2f);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], -1.0f))
|
||||||
|
ASSERT(test_eq(v1[1], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
glm_vec3_copy(v2, v1);
|
||||||
|
|
||||||
|
GLM(rotate2d)(m1, GLM_PI_2f);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[1], -1.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
glm_vec3_copy(v2, v1);
|
||||||
|
|
||||||
|
GLM(rotate2d)(m1, GLM_PI_2f);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], 1.0f))
|
||||||
|
ASSERT(test_eq(v1[1], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, rotate2d_to) {
|
||||||
|
mat3 m1 = GLM_MAT3_IDENTITY_INIT, m2;
|
||||||
|
vec3 v1 = {0.0f, 1.0f, 1.0f}, v2 = {0.0f, 1.0f, 1.0f};
|
||||||
|
|
||||||
|
GLM(rotate2d_to)(m1, GLM_PI_2f, m1);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], -1.0f))
|
||||||
|
ASSERT(test_eq(v1[1], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
glm_vec3_copy(v2, v1);
|
||||||
|
|
||||||
|
GLM(rotate2d_to)(m1, GLM_PI_2f, m2);
|
||||||
|
glm_mat3_mulv(m2, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[1], -1.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
glm_vec3_copy(v2, v1);
|
||||||
|
|
||||||
|
GLM(rotate2d_to)(m2, GLM_PI_2f, m1);
|
||||||
|
glm_mat3_mulv(m1, v1, v1);
|
||||||
|
|
||||||
|
ASSERT(test_eq(v1[0], 1.0f))
|
||||||
|
ASSERT(test_eq(v1[1], 0.0f))
|
||||||
|
ASSERT(test_eq(v1[2], 1.0f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "test_project.h"
|
#include "test_project.h"
|
||||||
#include "test_plane.h"
|
#include "test_plane.h"
|
||||||
#include "test_affine.h"
|
#include "test_affine.h"
|
||||||
|
#include "test_affine2d.h"
|
||||||
#include "test_affine_mat.h"
|
#include "test_affine_mat.h"
|
||||||
#include "test_ray.h"
|
#include "test_ray.h"
|
||||||
#include "test_camera.h"
|
#include "test_camera.h"
|
||||||
@@ -45,6 +46,7 @@
|
|||||||
#include "test_project.h"
|
#include "test_project.h"
|
||||||
#include "test_plane.h"
|
#include "test_plane.h"
|
||||||
#include "test_affine.h"
|
#include "test_affine.h"
|
||||||
|
#include "test_affine2d.h"
|
||||||
#include "test_affine_mat.h"
|
#include "test_affine_mat.h"
|
||||||
#include "test_ray.h"
|
#include "test_ray.h"
|
||||||
#include "test_camera.h"
|
#include "test_camera.h"
|
||||||
|
|||||||
54
test/tests.h
54
test/tests.h
@@ -70,6 +70,33 @@ TEST_DECLARE(glmc_uniscaled)
|
|||||||
TEST_DECLARE(glmc_decompose_rs)
|
TEST_DECLARE(glmc_decompose_rs)
|
||||||
TEST_DECLARE(glmc_decompose)
|
TEST_DECLARE(glmc_decompose)
|
||||||
|
|
||||||
|
/* affine 2d */
|
||||||
|
TEST_DECLARE(glm_translate2d)
|
||||||
|
TEST_DECLARE(glm_translate2d_to)
|
||||||
|
TEST_DECLARE(glm_translate2d_x)
|
||||||
|
TEST_DECLARE(glm_translate2d_y)
|
||||||
|
TEST_DECLARE(glm_translate2d_make)
|
||||||
|
TEST_DECLARE(glm_scale2d_to)
|
||||||
|
TEST_DECLARE(glm_scale2d_make)
|
||||||
|
TEST_DECLARE(glm_scale2d)
|
||||||
|
TEST_DECLARE(glm_scale2d_uni)
|
||||||
|
TEST_DECLARE(glm_rotate2d_make)
|
||||||
|
TEST_DECLARE(glm_rotate2d)
|
||||||
|
TEST_DECLARE(glm_rotate2d_to)
|
||||||
|
|
||||||
|
TEST_DECLARE(glmc_translate2d)
|
||||||
|
TEST_DECLARE(glmc_translate2d_to)
|
||||||
|
TEST_DECLARE(glmc_translate2d_x)
|
||||||
|
TEST_DECLARE(glmc_translate2d_y)
|
||||||
|
TEST_DECLARE(glmc_translate2d_make)
|
||||||
|
TEST_DECLARE(glmc_scale2d_to)
|
||||||
|
TEST_DECLARE(glmc_scale2d_make)
|
||||||
|
TEST_DECLARE(glmc_scale2d)
|
||||||
|
TEST_DECLARE(glmc_scale2d_uni)
|
||||||
|
TEST_DECLARE(glmc_rotate2d_make)
|
||||||
|
TEST_DECLARE(glmc_rotate2d)
|
||||||
|
TEST_DECLARE(glmc_rotate2d_to)
|
||||||
|
|
||||||
/* mat4 */
|
/* mat4 */
|
||||||
TEST_DECLARE(glm_mat4_ucopy)
|
TEST_DECLARE(glm_mat4_ucopy)
|
||||||
TEST_DECLARE(glm_mat4_copy)
|
TEST_DECLARE(glm_mat4_copy)
|
||||||
@@ -764,7 +791,34 @@ TEST_LIST {
|
|||||||
TEST_ENTRY(glmc_uniscaled)
|
TEST_ENTRY(glmc_uniscaled)
|
||||||
TEST_ENTRY(glmc_decompose_rs)
|
TEST_ENTRY(glmc_decompose_rs)
|
||||||
TEST_ENTRY(glmc_decompose)
|
TEST_ENTRY(glmc_decompose)
|
||||||
|
|
||||||
|
/* affine 2d */
|
||||||
|
TEST_ENTRY(glm_translate2d)
|
||||||
|
TEST_ENTRY(glm_translate2d_to)
|
||||||
|
TEST_ENTRY(glm_translate2d_x)
|
||||||
|
TEST_ENTRY(glm_translate2d_y)
|
||||||
|
TEST_ENTRY(glm_translate2d_make)
|
||||||
|
TEST_ENTRY(glm_scale2d_to)
|
||||||
|
TEST_ENTRY(glm_scale2d_make)
|
||||||
|
TEST_ENTRY(glm_scale2d)
|
||||||
|
TEST_ENTRY(glm_scale2d_uni)
|
||||||
|
TEST_ENTRY(glm_rotate2d_make)
|
||||||
|
TEST_ENTRY(glm_rotate2d)
|
||||||
|
TEST_ENTRY(glm_rotate2d_to)
|
||||||
|
|
||||||
|
TEST_ENTRY(glmc_translate2d)
|
||||||
|
TEST_ENTRY(glmc_translate2d_to)
|
||||||
|
TEST_ENTRY(glmc_translate2d_x)
|
||||||
|
TEST_ENTRY(glmc_translate2d_y)
|
||||||
|
TEST_ENTRY(glmc_translate2d_make)
|
||||||
|
TEST_ENTRY(glmc_scale2d_to)
|
||||||
|
TEST_ENTRY(glmc_scale2d_make)
|
||||||
|
TEST_ENTRY(glmc_scale2d)
|
||||||
|
TEST_ENTRY(glmc_scale2d_uni)
|
||||||
|
TEST_ENTRY(glmc_rotate2d_make)
|
||||||
|
TEST_ENTRY(glmc_rotate2d)
|
||||||
|
TEST_ENTRY(glmc_rotate2d_to)
|
||||||
|
|
||||||
/* mat4 */
|
/* mat4 */
|
||||||
TEST_ENTRY(glm_mat4_ucopy)
|
TEST_ENTRY(glm_mat4_ucopy)
|
||||||
TEST_ENTRY(glm_mat4_copy)
|
TEST_ENTRY(glm_mat4_copy)
|
||||||
|
|||||||
@@ -31,7 +31,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\test\include\common.h" />
|
<ClInclude Include="..\test\include\common.h" />
|
||||||
<ClInclude Include="..\test\src\test_affine.h" />
|
<ClInclude Include="..\test\src\test_affine.h" />
|
||||||
|
<ClInclude Include="..\test\src\test_affine2d.h" />
|
||||||
<ClInclude Include="..\test\src\test_affine_mat.h" />
|
<ClInclude Include="..\test\src\test_affine_mat.h" />
|
||||||
|
<ClInclude Include="..\test\src\test_camera.h" />
|
||||||
<ClInclude Include="..\test\src\test_common.h" />
|
<ClInclude Include="..\test\src\test_common.h" />
|
||||||
<ClInclude Include="..\test\src\test_mat2.h" />
|
<ClInclude Include="..\test\src\test_mat2.h" />
|
||||||
<ClInclude Include="..\test\src\test_mat3.h" />
|
<ClInclude Include="..\test\src\test_mat3.h" />
|
||||||
@@ -145,6 +147,7 @@
|
|||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<AdditionalIncludeDirectories>../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@@ -162,6 +165,7 @@
|
|||||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<AdditionalIncludeDirectories>../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
|
|||||||
@@ -82,5 +82,11 @@
|
|||||||
<ClInclude Include="..\test\src\test_ray.h">
|
<ClInclude Include="..\test\src\test_ray.h">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\test\src\test_affine2d.h">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\test\src\test_camera.h">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\affine.c" />
|
<ClCompile Include="..\src\affine.c" />
|
||||||
|
<ClCompile Include="..\src\affine2d.c" />
|
||||||
<ClCompile Include="..\src\bezier.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" />
|
||||||
@@ -43,11 +44,13 @@
|
|||||||
<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\affine2d.h" />
|
||||||
<ClInclude Include="..\include\cglm\applesimd.h" />
|
<ClInclude Include="..\include\cglm\applesimd.h" />
|
||||||
<ClInclude Include="..\include\cglm\bezier.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\affine2d.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\bezier.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" />
|
||||||
@@ -97,6 +100,7 @@
|
|||||||
<ClInclude Include="..\include\cglm\sphere.h" />
|
<ClInclude Include="..\include\cglm\sphere.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct.h" />
|
<ClInclude Include="..\include\cglm\struct.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\affine.h" />
|
<ClInclude Include="..\include\cglm\struct\affine.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\affine2d.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\box.h" />
|
<ClInclude Include="..\include\cglm\struct\box.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\cam.h" />
|
<ClInclude Include="..\include\cglm\struct\cam.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\color.h" />
|
<ClInclude Include="..\include\cglm\struct\color.h" />
|
||||||
@@ -247,6 +251,7 @@
|
|||||||
<PrecompiledHeaderFile />
|
<PrecompiledHeaderFile />
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
<EnablePREfast>true</EnablePREfast>
|
<EnablePREfast>true</EnablePREfast>
|
||||||
|
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
@@ -266,6 +271,7 @@
|
|||||||
<PrecompiledHeaderFile />
|
<PrecompiledHeaderFile />
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
<EnablePREfast>true</EnablePREfast>
|
<EnablePREfast>true</EnablePREfast>
|
||||||
|
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|||||||
@@ -95,6 +95,9 @@
|
|||||||
<ClCompile Include="..\src\ray.c">
|
<ClCompile Include="..\src\ray.c">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\affine2d.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\config.h">
|
<ClInclude Include="..\src\config.h">
|
||||||
@@ -358,5 +361,14 @@
|
|||||||
<ClInclude Include="..\include\cglm\simd\sse2\mat2.h">
|
<ClInclude Include="..\include\cglm\simd\sse2\mat2.h">
|
||||||
<Filter>include\cglm\simd\sse2</Filter>
|
<Filter>include\cglm\simd\sse2</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\affine2d.h">
|
||||||
|
<Filter>include\cglm\call</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\affine2d.h">
|
||||||
|
<Filter>include\cglm</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\affine2d.h">
|
||||||
|
<Filter>include\cglm\struct</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Reference in New Issue
Block a user