Compare commits

..

5 Commits

Author SHA1 Message Date
Recep Aslantas
3335c04a34 euler: use enum and static values for EULER ORDER, remove some macros 2020-03-23 09:23:45 +03:00
Recep Aslantas
af2c866c6d Update CREDITS 2020-03-22 22:13:25 +03:00
Recep Aslantas
5698653f54 Update euler.h 2020-03-22 22:10:31 +03:00
Recep Aslantas
980b42a865 Update euler.h 2020-03-22 22:09:44 +03:00
Recep Aslantas
cc6660aa00 use Ken Shoemake's algorithm (gemsiv/euler_angle)
this must be more robust and flexible api
2020-03-22 22:03:15 +03:00
49 changed files with 295 additions and 803 deletions

1
.gitattributes vendored
View File

@@ -1 +0,0 @@
*.h linguist-language=C

3
.gitignore vendored
View File

@@ -72,6 +72,3 @@ cglm-test-ios*
/cglm.pc
test-driver
Default-568h@2x.png
build/
conftest.dir/*
confdefs.h

View File

@@ -1,4 +0,0 @@
{
"C_Cpp.default.configurationProvider": "vector-of-bool.cmake-tools",
"restructuredtext.confPath": "${workspaceFolder}/docs/source"
}

View File

@@ -1,195 +0,0 @@
cmake_minimum_required(VERSION 3.8.2)
project(cglm VERSION 0.7.4 LANGUAGES C)
set(C_STANDARD 11)
set(C_STANDARD_REQUIRED YES)
set(CGLM_BUILD)
option(CGLM_SHARED "Shared build" ON)
option(CGLM_STATIC "Static build" OFF)
option(CGLM_USE_C99 "" OFF)
option(CGLM_USE_TEST "Enable Tests" OFF)
if(NOT CGLM_STATIC AND CGLM_SHARED)
set(CGLM_BUILD SHARED)
else(CGLM_STATIC)
set(CGLM_BUILD STATIC)
endif()
if(CGLM_USE_C99)
set(C_STANDARD 99)
endif()
if(MSVC)
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL -DCGLM_EXPORTS -DCGLM_DLL)
add_compile_options("/W3" "/Ox" "/Gy" "/Oi" "/TC" "/analyze")
else()
add_compile_options("-Wall" "-Werror" "-std=gnu11" "-O3")
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
# Currently, nothing special to be seen here.
else()
add_compile_options("-Werror=strict-prototypes")
endif()
endif()
set(HEADERS
include/cglm/version.h
include/cglm/common.h
include/cglm/types.h
include/cglm/types-struct.h
include/cglm/cglm.h
include/cglm/call.h
include/cglm/struct.h
include/cglm/cam.h
include/cglm/io.h
include/cglm/mat4.h
include/cglm/mat3.h
include/cglm/mat2.h
include/cglm/affine.h
include/cglm/vec2.h
include/cglm/vec2-ext.h
include/cglm/vec3.h
include/cglm/vec3-ext.h
include/cglm/vec4.h
include/cglm/vec4-ext.h
include/cglm/euler.h
include/cglm/util.h
include/cglm/quat.h
include/cglm/affine-mat.h
include/cglm/plane.h
include/cglm/frustum.h
include/cglm/box.h
include/cglm/color.h
include/cglm/project.h
include/cglm/sphere.h
include/cglm/ease.h
include/cglm/curve.h
include/cglm/bezier.h
include/cglm/applesimd.h
include/cglm/ray.h
)
set(HEADERS_CALL
include/cglm/call/mat4.h
include/cglm/call/mat3.h
include/cglm/call/mat2.h
include/cglm/call/vec2.h
include/cglm/call/vec3.h
include/cglm/call/vec4.h
include/cglm/call/affine.h
include/cglm/call/io.h
include/cglm/call/cam.h
include/cglm/call/quat.h
include/cglm/call/euler.h
include/cglm/call/plane.h
include/cglm/call/frustum.h
include/cglm/call/box.h
include/cglm/call/project.h
include/cglm/call/sphere.h
include/cglm/call/ease.h
include/cglm/call/curve.h
include/cglm/call/bezier.h
include/cglm/call/ray.h
)
set(HEADERS_SIMD
include/cglm/simd/intrin.h
include/cglm/simd/x86.h
include/cglm/simd/arm.h
)
set(HEADERS_SIMD_SSE2
include/cglm/simd/sse2/affine.h
include/cglm/simd/sse2/mat4.h
include/cglm/simd/sse2/mat3.h
include/cglm/simd/sse2/mat2.h
include/cglm/simd/sse2/quat.h
)
set(HEADERS_SIMD_AVX
include/cglm/simd/avx/mat4.h
include/cglm/simd/avx/affine.h
)
set(HEADERS_SIMD_NEON
include/cglm/simd/neon/mat4.h
)
set(HEADERS_STRUCT
include/cglm/struct/mat4.h
include/cglm/struct/mat3.h
include/cglm/struct/mat2.h
include/cglm/struct/vec2.h
include/cglm/struct/vec2-ext.h
include/cglm/struct/vec3.h
include/cglm/struct/vec3-ext.h
include/cglm/struct/vec4.h
include/cglm/struct/vec4-ext.h
include/cglm/struct/affine.h
include/cglm/struct/io.h
include/cglm/struct/cam.h
include/cglm/struct/quat.h
include/cglm/struct/euler.h
include/cglm/struct/plane.h
include/cglm/struct/frustum.h
include/cglm/struct/box.h
include/cglm/struct/project.h
include/cglm/struct/sphere.h
include/cglm/struct/color.h
include/cglm/struct/curve.h
)
add_library(cglm
${CGLM_BUILD}
src/euler.c
src/affine.c
src/io.c
src/quat.c
src/cam.c
src/vec2.c
src/vec3.c
src/vec4.c
src/mat2.c
src/mat3.c
src/mat4.c
src/plane.c
src/frustum.c
src/box.c
src/project.c
src/sphere.c
src/ease.c
src/curve.c
src/bezier.c
src/ray.c
)
set_target_properties(cglm PROPERTIES VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
target_include_directories(cglm PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
install(
TARGETS cglm
EXPORT cglm
ARCHIVE DESTINATION lib/ COMPONENT development
LIBRARY DESTINATION lib/ COMPONENT runtime NAMELINK_SKIP
RUNTIME DESTINATION ${CMAKE_INSTALL_NAME_DIR} COMPONENT runtime
)
if(CGLM_SHARED)
install(
TARGETS cglm
EXPORT cglm
LIBRARY DESTINATION include/ COMPONENT development NAMELINK_ONLY
)
endif()
INSTALL(DIRECTORY include/ DESTINATION include)
# Test Configuration
if(CGLM_USE_TEST)
enable_testing()
add_subdirectory(test)
endif()

22
CREDITS
View File

@@ -65,9 +65,19 @@ https://forums.khronos.org/showthread.php/10651-Animation-TCB-Spline-Interpolati
12. vec2 cross product
http://allenchou.net/2013/07/cross-product-of-2d-vectors/
13. Ray triangle intersect
MöllerTrumbore ray-triangle intersection algorithm, from "Fast, Minimum Storage Ray/Triangle Intersection"
Authors:
Thomas Möller (tompa@clarus.se)
Ben Trumbore (wbt@graphics.cornell.edu)
Link to paper: http://webserver2.tecgraf.puc-rio.br/~mgattass/cg/trbRR/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf
13. Ken Shoemake's algorithm Implementation and Euler
Ken Shoemake's algorithm impl. is taken from this repo by permission:
https://github.com/erich666/GraphicsGems/blob/master/gemsiv/euler_angle
* -------------------------- GraphicsGems EULA ----------------------------- *
| http://www.realtimerendering.com/resources/GraphicsGems/ |
| |
| EULA: The Graphics Gems code is copyright-protected. In other words, you |
| cannot claim the text of the code as your own and resell it. Using the |
| code is permitted in any program, product, or library, non-commercial or |
| commercial. Giving credit is not required, though is a nice gesture. |
| The code comes as-is, and if there are any flaws or problems with any Gems |
| code, nobody involved with Gems - authors, editors, publishers, or |
| webmasters - are to be held responsible. Basically, don't be a jerk, and |
| remember that anything free comes with no guarantee. |
* -------------------------------- END --------------------------------------*/

View File

@@ -63,8 +63,7 @@ cglm_HEADERS = include/cglm/version.h \
include/cglm/ease.h \
include/cglm/curve.h \
include/cglm/bezier.h \
include/cglm/applesimd.h \
include/cglm/ray.h
include/cglm/applesimd.h
cglm_calldir=$(includedir)/cglm/call
cglm_call_HEADERS = include/cglm/call/mat4.h \
@@ -85,8 +84,7 @@ cglm_call_HEADERS = include/cglm/call/mat4.h \
include/cglm/call/sphere.h \
include/cglm/call/ease.h \
include/cglm/call/curve.h \
include/cglm/call/bezier.h \
include/cglm/call/ray.h
include/cglm/call/bezier.h
cglm_simddir=$(includedir)/cglm/simd
cglm_simd_HEADERS = include/cglm/simd/intrin.h \
@@ -97,7 +95,6 @@ cglm_simd_sse2dir=$(includedir)/cglm/simd/sse2
cglm_simd_sse2_HEADERS = include/cglm/simd/sse2/affine.h \
include/cglm/simd/sse2/mat4.h \
include/cglm/simd/sse2/mat3.h \
include/cglm/simd/sse2/mat2.h \
include/cglm/simd/sse2/quat.h
cglm_simd_avxdir=$(includedir)/cglm/simd/avx
@@ -110,7 +107,6 @@ cglm_simd_neon_HEADERS = include/cglm/simd/neon/mat4.h
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/vec2.h \
include/cglm/struct/vec2-ext.h \
include/cglm/struct/vec3.h \
@@ -149,8 +145,7 @@ libcglm_la_SOURCES=\
src/sphere.c \
src/ease.c \
src/curve.c \
src/bezier.c \
src/ray.c
src/bezier.c
test_tests_SOURCES=\
test/runner.c \

View File

@@ -89,7 +89,6 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi
- curves
- curve interpolation helpers (S*M*C, deCasteljau...)
- helpers to convert cglm types to Apple's simd library to pass cglm types to Metal GL without packing them on both sides
- ray intersection helpers
- and others...
<hr />
@@ -149,38 +148,6 @@ The types used are actually unions that allow access to the same data multiple w
## Build
### CMake (All platforms)
```bash
$ mkdir build
$ cd build
$ cmake .. # [Optional] -DCGLM_SHARED=ON
$ make
$ sudo make install # [Optional]
```
##### Cmake options with Defaults:
```CMake
option(CGLM_SHARED "Shared build" ON)
option(CGLM_STATIC "Static build" OFF)
option(CGLM_USE_C99 "" OFF) # C11
option(CGLM_USE_TEST "Enable Tests" OFF) # for make check - make test
```
#### Use with your CMake project
* Example:
```cmake
cmake_minimum_required(VERSION 3.8.2)
project(<Your Project Name>)
add_executable(${PROJECT_NAME} src/main.c)
target_link_libraries(${LIBRARY_NAME} PRIVATE
cglm)
add_subdirectory(external/cglm/)
```
### Unix (Autotools)
```bash
@@ -324,7 +291,7 @@ You can pass matrices the same way to other APIs e.g. Vulkan, DX...
## Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
<a href="https://github.com/recp/cglm/graphs/contributors"><img src="https://opencollective.com/cglm/contributors.svg?width=890&button=false" /></a>
<a href="graphs/contributors"><img src="https://opencollective.com/cglm/contributors.svg?width=890&button=false" /></a>
## Backers

View File

@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
# Description
s.name = "cglm"
s.version = "0.7.2"
s.version = "0.6.1"
s.summary = "📽 Optimized OpenGL/Graphics Math (glm) for C"
s.description = <<-DESC
cglm is math library for graphics programming for C. It is similar to original glm but it is written for C instead of C++ (you can use here too). See the documentation or README for all features.

View File

@@ -7,7 +7,7 @@
#*****************************************************************************
AC_PREREQ([2.69])
AC_INIT([cglm], [0.7.4], [info@recp.me])
AC_INIT([cglm], [0.7.1], [info@recp.me])
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.

View File

@@ -51,5 +51,3 @@ Follow the :doc:`build` documentation for this
sphere
curve
bezier
version
ray

View File

@@ -7,46 +7,6 @@ Build cglm
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
CMake (All platforms):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
:linenos:
$ mkdir build
$ cd build
$ cmake .. # [Optional] -DCGLM_SHARED=ON
$ make
$ sudo make install # [Optional]
**make** will build cglm to **build** folder.
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.
**CMake Options:**
.. code-block:: CMake
:linenos:
option(CGLM_SHARED "Shared build" ON)
option(CGLM_STATIC "Static build" OFF)
option(CGLM_USE_C99 "" OFF) # C11
option(CGLM_USE_TEST "Enable Tests" OFF) # for make check - make test
**Use with your CMake project example**
.. code-block:: CMake
:linenos:
cmake_minimum_required(VERSION 3.8.2)
project(<Your Project Name>)
add_executable(${PROJECT_NAME} src/main.c)
target_link_libraries(${LIBRARY_NAME} PRIVATE
cglm)
add_subdirectory(external/cglm/)
Unix (Autotools):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -198,7 +198,7 @@ Functions documentation
Parameters:
| *[in]* **eye** eye vector
| *[in]* **dir** direction vector
| *[in]* **center** direction vector
| *[in]* **up** up vector
| *[out]* **dest** result matrix
@@ -212,7 +212,7 @@ Functions documentation
Parameters:
| *[in]* **eye** eye vector
| *[in]* **dir** direction vector
| *[in]* **center** direction vector
| *[out]* **dest** result matrix
.. c:function:: void glm_persp_decomp(mat4 proj, float *nearVal, float *farVal, float *top, float *bottom, float *left, float *right)

View File

@@ -62,9 +62,9 @@ author = u'Recep Aslantas'
# built documents.
#
# The short X.Y version.
version = u'0.7.4'
version = u'0.7.1'
# The full version, including alpha/beta/rc tags.
release = u'0.7.4'
release = u'0.7.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@@ -1,11 +1,10 @@
Features
================================================================================
* array api and struct api, you can use arrays or structs.
* general purpose matrix operations (mat4, mat3)
* chain matrix multiplication (square only)
* general purpose vector operations (cross, dot, rotate, proj, angle...)
* affine transformations
* affine transforms
* matrix decomposition (extract rotation, scaling factor)
* optimized affine transform matrices (mul, rigid-body inverse)
* camera (lookat)
@@ -21,6 +20,4 @@ Features
* easing functions
* curves
* curve interpolation helpers (SMC, deCasteljau...)
* helpers to convert cglm types to Apple's simd library to pass cglm types to Metal GL without packing them on both sides
* ray intersection helpers
* and others...
* and other...

View File

@@ -28,23 +28,6 @@ Example to print mat4 matrix:
(you probably will in some cases), you can change it temporary.
cglm may provide precision parameter in the future
Changes since **v0.7.3**:
* Now mis-alignment of columns are fixed: larger numbers are printed via %g and others are printed via %f. Column withs are calculated before print.
* Now values are colorful ;)
* Some print improvements
* New options with default values:
.. code-block:: c
#define CGLM_PRINT_PRECISION 5
#define CGLM_PRINT_MAX_TO_SHORT 1e5
#define CGLM_PRINT_COLOR "\033[36m"
#define CGLM_PRINT_COLOR_RESET "\033[0m"
* Inline prints are only enabled in DEBUG mode and if **CGLM_DEFINE_PRINTS** is defined.
Check options page.
Table of contents (click to go):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -50,24 +50,3 @@ You have to extra options for dot product: **CGLM_SSE4_DOT** and **CGLM_SSE3_DOT
- If **SSE3** is enabled then you can define **CGLM_SSE3_DOT** to force cglm to use **_mm_hadd_ps** instructions.
otherwise cglm will use custom cglm's hadd functions which are optimized too.
Print Options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. **CGLM_DEFINE_PRINTS**
2. **CGLM_NO_PRINTS_NOOP**
Inline prints are only enabled in DEBUG mode and if **CGLM_DEFINE_PRINTS** is defined.
If DEBUG is not enabled then print function bodies will be emptied to eliminate print function calls.
You can disable this feature too by defining **CGLM_NO_PRINTS_NOOP** macro top of cglm headers.
3. **CGLM_PRINT_PRECISION** 5
precision.
4. **CGLM_PRINT_MAX_TO_SHORT** 1e5
if a number is greater than this value then %g will be used, since this is shorten print you won't be able to see high precision.
5. **CGLM_PRINT_COLOR** "\033[36m"
6. **CGLM_PRINT_COLOR_RESET** "\033[0m"

View File

@@ -1,31 +0,0 @@
.. default-domain:: C
ray
====
Header: cglm/ray.h
This is for collision-checks used by ray-tracers and the like.
Table of contents (click to go):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Functions:
1. :c:func:`glm_ray_triangle`
Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~
.. c:function:: bool glm_ray_triangle(vec3 origin, vec3 direction, vec3 v0, vec3 v1, vec3 v2, float *d)
MöllerTrumbore ray-triangle intersection algorithm
Parameters:
| *[in]* **origin** origin of ray
| *[in]* **direction** direction of ray
| *[in]* **v0** first vertex of triangle
| *[in]* **v1** second vertex of triangle
| *[in]* **v2** third vertex of triangle
| *[in, out]* **d** float pointer to save distance to intersection
| *[out]* **intersection** whether there is intersection

View File

@@ -23,7 +23,6 @@ Functions:
#. :c:func:`glm_max`
#. :c:func:`glm_clamp`
#. :c:func:`glm_lerp`
#. :c:func:`glm_swapf`
Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~
@@ -147,7 +146,7 @@ Functions documentation
| *[in]* **b** b
Returns:
true if a and b are equal
true if a and b equals
.. c:function:: float glm_percent(float from, float to, float current)
@@ -159,7 +158,7 @@ Functions documentation
| *[in]* **current** value between from and to values
Returns:
percentage of current value
clamped normalized percent (0-100 in 0-1)
.. c:function:: float glm_percentc(float from, float to, float current)
@@ -172,11 +171,3 @@ Functions documentation
Returns:
clamped normalized percent (0-100 in 0-1)
.. c:function:: void glm_swapf(float *a, float *b)
swap two float values
Parameters:
| *[in]* **a** float 1
| *[in]* **b** float 2

View File

@@ -392,7 +392,7 @@ Functions documentation
Parameters:
| *[in, out]* **v** vector
| *[in]* **axis** axis vector (will be normalized)
| *[in]* **angle** angle (radians)
| *[out]* **angle** angle (radians)
.. c:function:: void glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest)
@@ -435,8 +435,8 @@ Functions documentation
squared distance between two vectors
Parameters:
| *[in]* **v1** vector1
| *[in]* **v2** vector2
| *[in]* **mat** vector1
| *[in]* **row1** vector2
Returns:
| squared distance (distance * distance)
@@ -446,8 +446,8 @@ Functions documentation
distance between two vectors
Parameters:
| *[in]* **v1** vector1
| *[in]* **v2** vector2
| *[in]* **mat** vector1
| *[in]* **row1** vector2
Returns:
| distance
@@ -475,7 +475,7 @@ Functions documentation
possible orthogonal/perpendicular vector
Parameters:
| *[in]* **v** vector
| *[in]* **mat** vector
| *[out]* **dest** orthogonal/perpendicular vector
.. c:function:: void glm_vec3_clamp(vec3 v, float minVal, float maxVal)

View File

@@ -1,15 +0,0 @@
.. default-domain:: C
version
================================================================================
Header: cglm/version.h
**cglm** uses semantic versioning (http://semver.org) which is MAJOR.MINOR.PATCH
| **CGLM_VERSION_MAJOR** is major number of the version.
| **CGLM_VERSION_MINOR** is minor number of the version.
| **CGLM_VERSION_PATCH** is patch number of the version.
every release increases these numbers. You can check existing version by
including `cglm/version.h`

View File

@@ -40,6 +40,10 @@
#include "mat4.h"
#include "affine-mat.h"
CGLM_INLINE
void
glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest);
/*!
* @brief translate existing transform matrix by v vector
* and stores result in same matrix

View File

@@ -31,7 +31,6 @@ extern "C" {
#include "call/ease.h"
#include "call/curve.h"
#include "call/bezier.h"
#include "call/ray.h"
#ifdef __cplusplus
}

View File

@@ -7,7 +7,6 @@
#ifndef cglmc_io_h
#define cglmc_io_h
#ifdef __cplusplus
extern "C" {
#endif

View File

@@ -1,27 +0,0 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/
#ifndef cglmc_ray_h
#define cglmc_ray_h
#ifdef __cplusplus
extern "C" {
#endif
#include "../cglm.h"
CGLM_EXPORT
bool
glmc_ray_triangle(vec3 origin,
vec3 direction,
vec3 v0,
vec3 v1,
vec3 v2,
float *d);
#ifdef __cplusplus
}
#endif
#endif /* cglmc_ray_h */

View File

@@ -30,6 +30,5 @@
#include "ease.h"
#include "curve.h"
#include "bezier.h"
#include "ray.h"
#endif /* cglm_h */

View File

@@ -8,8 +8,7 @@
#ifndef cglm_common_h
#define cglm_common_h
#define _USE_MATH_DEFINES /* for windows */
#define _CRT_SECURE_NO_WARNINGS /* for windows */
#define _USE_MATH_DEFINES /* for windows */
#include <stdint.h>
#include <stddef.h>

View File

@@ -18,24 +18,160 @@
enum glm_euler_seq
Functions:
CGLM_INLINE glm_euler_seq glm_euler_order(int newOrder[3]);
CGLM_INLINE void glm_euler_angles(mat4 m, vec3 dest);
CGLM_INLINE void glm_euler(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_xyz(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_zyx(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_zxy(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_xzy(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_yzx(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_yxz(vec3 angles, mat4 dest);
CGLM_INLINE void glm_euler_by_order(vec3 angles,
glm_euler_seq ord,
mat4 dest);
CGLM_INLINE glm_eul_mat4(vec3 ea, int order, mat4 dest)
*/
#ifndef cglm_euler_h
#define cglm_euler_h
#include "common.h"
#include "util.h"
/* ---------- Notice for Ken Shoemake's algorithm Implementation -------------*
| Ken Shoemake's algorithm impl. is taken from this repo by permission: |
| https://github.com/erich666/GraphicsGems/blob/master/gemsiv/euler_angle |
| |
| cglm doesn't claim the ownership of GraphicsGems source codes |
| and the algorithm itself. But cglm may change variable names or some piece |
| of codes in order to apply optimizations or to make it usable in cglm. |
| |
| Related issue: https://github.com/recp/cglm/issues/30 |
| |
* -------------------------- GraphicsGems EULA ----------------------------- *
| Related EULA for GraphicsGems can be found at below, plus in CREDITS: |
| http://www.realtimerendering.com/resources/GraphicsGems/ |
| |
| EULA: The Graphics Gems code is copyright-protected. In other words, you |
| cannot claim the text of the code as your own and resell it. Using the |
| code is permitted in any program, product, or library, non-commercial or |
| commercial. Giving credit is not required, though is a nice gesture. |
| The code comes as-is, and if there are any flaws or problems with any Gems |
| code, nobody involved with Gems - authors, editors, publishers, or |
| webmasters - are to be held responsible. Basically, don't be a jerk, and |
| remember that anything free comes with no guarantee. |
* -------------------------------- END --------------------------------------*/
/* Order type constants, constructors, extractors
* There are 24 possible conventions, designated by:
* o EulAxI = axis used initially
* o EulPar = parity of axis permutation
* o EulRep = repetition of initial axis as last
* o EulFrm = frame from which axes are taken
* Axes I,J,K will be a permutation of X,Y,Z.
* Axis H will be either I or K, depending on EulRep.
* Frame S takes axes from initial static frame.
* If ord = (AxI=X, Par=Even, Rep=No, Frm=S), then
* {a,b,c,ord} means Rz(c)Ry(b)Rx(a), where Rz(c)v
* rotates v around Z by c radians.
*/
#define EulRep(ord) (((unsigned)(ord)>>1)&1)
#define EulFrm(ord) ((unsigned)(ord)&1)
#define EulPar(ord) (((unsigned)(ord)>>2)&1)
/*! this code is merely a quick (and legal!) way to set arrays,
EulSafe being 0,1,2,0 */
#define EulSafe "\000\001\002\000"
#define EulNext "\001\002\000\001"
#define EulAxI(ord) ((int)(EulSafe[(((unsigned)(ord)>>3)&3)]))
#define EulAxJ(ord) ((int)(EulNext[EulAxI(ord)+(EulPar(ord)==EulParOdd)]))
#define EulAxK(ord) ((int)(EulNext[EulAxI(ord)+(EulPar(ord)!=EulParOdd)]))
#define EulAxH(ord) ((EulRep(ord)==EulRepNo)?EulAxK(ord):EulAxI(ord))
/*! EulGetOrd unpacks all useful information about order simultaneously. */
#define EulGetOrd(ord,i,j,k,h,n,s,f) \
{unsigned o=(unsigned)ord;f=o&1;o>>=1;s=o&1;o>>=1;\
n=o&1;o>>=1;i=EulSafe[o&3];j=EulNext[i+n];k=EulNext[i+1-n];h=s?k:i;}
typedef enum glm_eul_order {
/*! Static axes */
GLM_EUL_XYZs = 0,
GLM_EUL_XYXs = 2,
GLM_EUL_XZYs = 4,
GLM_EUL_XZXs = 6,
GLM_EUL_YZXs = 8,
GLM_EUL_YZYs = 10,
GLM_EUL_YXZs = 12,
GLM_EUL_YXYs = 14,
GLM_EUL_ZXYs = 16,
GLM_EUL_ZXZs = 18,
GLM_EUL_ZYXs = 20,
GLM_EUL_ZYZs = 22,
/*! Rotating axes */
GLM_EUL_ZYXr = 1,
GLM_EUL_XYXr = 3,
GLM_EUL_YZXr = 5,
GLM_EUL_XZXr = 7,
GLM_EUL_XZYr = 9,
GLM_EUL_YZYr = 11,
GLM_EUL_ZXYr = 13,
GLM_EUL_YXYr = 15,
GLM_EUL_YXZr = 17,
GLM_EUL_ZXZr = 19,
GLM_EUL_XYZr = 21,
GLM_EUL_ZYZr = 23
} glm_eul_order;
/*!
* @brief build matrix from euler angles
*
* @param[in] ea [Xangle, Yangle, Zangle]
* @param[out] dest rotation matrix
*/
CGLM_INLINE
void
glm_eul_mat4(vec3 ea, glm_eul_order order, mat4 dest) {
float ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss;
int i, j, k, h, parOdd, repYes, frmR;
EulGetOrd(order, i, j, k, h, parOdd, repYes, frmR);
if (frmR == 1)
glm_swapf(&ea[0], &ea[2]);
if (parOdd == 1)
glm_vec3_negate(ea);
ti = ea[0]; tj = ea[1]; th = ea[2];
ci = cosf(ti); cj = cosf(tj);
ch = cosf(th); si = sinf(ti);
sj = sinf(tj); sh = sinf(th);
cc = ci * ch; cs = ci * sh;
sc = si * ch; ss = si * sh;
if (repYes == 1) {
dest[i][i] = cj;
dest[i][j] = sj * si;
dest[i][k] = sj * ci;
dest[j][i] = sj * sh;
dest[j][j] = -cj * ss + cc;
dest[j][k] = -cj * cs - sc;
dest[k][i] = -sj * ch;
dest[k][j] = cj * sc + cs;
dest[k][k] = cj * cc - ss;
} else {
dest[i][i] = cj * ch;
dest[i][j] = sj * sc - cs;
dest[i][k] = sj * cc + ss;
dest[j][i] = cj * sh;
dest[j][j] = sj * ss + cc;
dest[j][k] = sj * cs - sc;
dest[k][i] = -sj;
dest[k][j] = cj * si;
dest[k][k] = cj * ci;
}
dest[3][0] = 0.f;
dest[3][1] = 0.f;
dest[3][2] = 0.f;
dest[0][3] = 0.f;
dest[1][3] = 0.f;
dest[2][3] = 0.f;
dest[3][3] = 1.f;
}
/*!
* if you have axis order like vec3 orderVec = [0, 1, 2] or [0, 2, 1]...
@@ -55,6 +191,8 @@ typedef enum glm_euler_seq {
GLM_EULER_ZYX = 2 << 0 | 1 << 2 | 0 << 4
} glm_euler_seq;
typedef glm_euler_seq glm_euler_sq;
CGLM_INLINE
glm_euler_seq
glm_euler_order(int ord[3]) {

View File

@@ -17,99 +17,67 @@
#ifndef cglm_io_h
#define cglm_io_h
#if defined(DEBUG) || defined(_DEBUG) \
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC)
#include "common.h"
#include <stdio.h>
#include <stdlib.h>
#define CGLM_PRINT_PRECISION 5
#define CGLM_PRINT_MAX_TO_SHORT 1e5
#define CGLM_PRINT_COLOR "\033[36m"
#define CGLM_PRINT_COLOR_RESET "\033[0m"
CGLM_INLINE
void
glm_mat4_print(mat4 matrix,
FILE * __restrict ostream) {
char buff[16];
int i, j, cw[4], cwi;
int i;
int j;
#define m 4
#define n 4
fprintf(ostream, "Matrix (float%dx%d): " CGLM_PRINT_COLOR "\n" , m, n);
cw[0] = cw[1] = cw[2] = cw[3] = 0;
fprintf(ostream, "Matrix (float%dx%d):\n", m, n);
for (i = 0; i < m; i++) {
fprintf(ostream, "\t|");
for (j = 0; j < n; j++) {
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
cwi = sprintf(buff, "% .*f", CGLM_PRINT_PRECISION, matrix[i][j]);
else
cwi = sprintf(buff, "% g", matrix[i][j]);
cw[i] = GLM_MAX(cw[i], cwi);
fprintf(ostream, "%0.4f", matrix[j][i]);;
if (j != n - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, "|\n");
}
for (i = 0; i < m; i++) {
fprintf(ostream, " |");
for (j = 0; j < n; j++)
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % *.*f", cw[j], CGLM_PRINT_PRECISION, matrix[j][i]);
else
fprintf(ostream, " % *g", cw[j], matrix[j][i]);
fprintf(ostream, " |\n");
}
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
fprintf(ostream, "\n");
#undef m
#undef n
}
CGLM_INLINE
void
glm_mat3_print(mat3 matrix,
FILE * __restrict ostream) {
char buff[16];
int i, j, cw[4], cwi;
int i;
int j;
#define m 3
#define n 3
fprintf(ostream, "Matrix (float%dx%d): " CGLM_PRINT_COLOR "\n", m, n);
cw[0] = cw[1] = cw[2] = 0;
fprintf(ostream, "Matrix (float%dx%d):\n", m, n);
for (i = 0; i < m; i++) {
fprintf(ostream, "\t|");
for (j = 0; j < n; j++) {
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
cwi = sprintf(buff, "% .*f", CGLM_PRINT_PRECISION, matrix[i][j]);
else
cwi = sprintf(buff, "% g", matrix[i][j]);
cw[i] = GLM_MAX(cw[i], cwi);
fprintf(ostream, "%0.4f", matrix[j][i]);;
if (j != n - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, "|\n");
}
for (i = 0; i < m; i++) {
fprintf(ostream, " |");
for (j = 0; j < n; j++)
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % *.*f", cw[j], CGLM_PRINT_PRECISION, matrix[j][i]);
else
fprintf(ostream, " % *g", cw[j], matrix[j][i]);
fprintf(ostream, " |\n");
}
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
fprintf(ostream, "\n");
#undef m
#undef n
@@ -119,39 +87,27 @@ CGLM_INLINE
void
glm_mat2_print(mat2 matrix,
FILE * __restrict ostream) {
char buff[16];
int i, j, cw[4], cwi;
int i;
int j;
#define m 2
#define n 2
fprintf(ostream, "Matrix (float%dx%d): " CGLM_PRINT_COLOR "\n", m, n);
cw[0] = cw[1] = 0;
fprintf(ostream, "Matrix (float%dx%d):\n", m, n);
for (i = 0; i < m; i++) {
fprintf(ostream, "\t|");
for (j = 0; j < n; j++) {
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
cwi = sprintf(buff, "% .*f", CGLM_PRINT_PRECISION, matrix[i][j]);
else
cwi = sprintf(buff, "% g", matrix[i][j]);
cw[i] = GLM_MAX(cw[i], cwi);
fprintf(ostream, "%0.4f", matrix[j][i]);;
if (j != n - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, "|\n");
}
for (i = 0; i < m; i++) {
fprintf(ostream, " |");
for (j = 0; j < n; j++)
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % *.*f", cw[j], CGLM_PRINT_PRECISION, matrix[j][i]);
else
fprintf(ostream, " % *g", cw[j], matrix[j][i]);
fprintf(ostream, " |\n");
}
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
fprintf(ostream, "\n");
#undef m
#undef n
@@ -165,16 +121,16 @@ glm_vec4_print(vec4 vec,
#define m 4
fprintf(ostream, "Vector (float%d): " CGLM_PRINT_COLOR "\n (", m);
fprintf(ostream, "Vector (float%d):\n\t|", m);
for (i = 0; i < m; i++) {
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
else
fprintf(ostream, " % g", vec[i]);
fprintf(ostream, "%0.4f", vec[i]);
if (i != m - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
fprintf(ostream, "|\n\n");
#undef m
}
@@ -187,16 +143,16 @@ glm_vec3_print(vec3 vec,
#define m 3
fprintf(ostream, "Vector (float%d): " CGLM_PRINT_COLOR "\n (", m);
fprintf(ostream, "Vector (float%d):\n\t|", m);
for (i = 0; i < m; i++) {
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
else
fprintf(ostream, " % g", vec[i]);
fprintf(ostream, "%0.4f", vec[i]);
if (i != m - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
fprintf(ostream, "|\n\n");
#undef m
}
@@ -209,12 +165,16 @@ glm_ivec3_print(ivec3 vec,
#define m 3
fprintf(ostream, "Vector (int%d): " CGLM_PRINT_COLOR "\n (", m);
fprintf(ostream, "Vector (int%d):\n\t|", m);
for (i = 0; i < m; i++)
fprintf(ostream, " % d", vec[i]);
for (i = 0; i < m; i++) {
fprintf(ostream, "%d", vec[i]);
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
if (i != m - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, "|\n\n");
#undef m
}
@@ -227,16 +187,16 @@ glm_vec2_print(vec2 vec,
#define m 2
fprintf(ostream, "Vector (float%d): " CGLM_PRINT_COLOR "\n (", m);
fprintf(ostream, "Vector (float%d):\n\t|", m);
for (i = 0; i < m; i++) {
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
else
fprintf(ostream, " % g", vec[i]);
fprintf(ostream, "%0.4f", vec[i]);
if (i != m - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
fprintf(ostream, "|\n\n");
#undef m
}
@@ -249,17 +209,16 @@ glm_versor_print(versor vec,
#define m 4
fprintf(ostream, "Quaternion (float%d): " CGLM_PRINT_COLOR "\n (", m);
fprintf(ostream, "Versor (float%d):\n\t|", m);
for (i = 0; i < m; i++) {
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
else
fprintf(ostream, " % g", vec[i]);
fprintf(ostream, "%0.4f", vec[i]);
if (i != m - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
fprintf(ostream, "|\n\n");
#undef m
}
@@ -273,43 +232,24 @@ glm_aabb_print(vec3 bbox[2],
#define m 3
fprintf(ostream, "AABB (%s): " CGLM_PRINT_COLOR "\n", tag ? tag: "float");
fprintf(ostream, "AABB (%s):\n", tag ? tag: "float");
for (i = 0; i < 2; i++) {
fprintf(ostream, " (");
fprintf(ostream, "\t|");
for (j = 0; j < m; j++) {
if (bbox[i][j] < CGLM_PRINT_MAX_TO_SHORT)
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, bbox[i][j]);
else
fprintf(ostream, " % g", bbox[i][j]);
fprintf(ostream, "%0.4f", bbox[i][j]);
if (j != m - 1)
fprintf(ostream, "\t");
}
fprintf(ostream, " )\n");
fprintf(ostream, "|\n");
}
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
fprintf(ostream, "\n");
#undef m
}
#elif !defined(CGLM_NO_PRINTS_NOOP)
#include "common.h"
#include <stdio.h>
#include <stdlib.h>
/* NOOP: Remove print from DEBUG */
#define glm_mat4_print(...)
#define glm_mat3_print(...)
#define glm_mat2_print(...)
#define glm_vec4_print(...)
#define glm_vec3_print(...)
#define glm_ivec3_print(...)
#define glm_vec2_print(...)
#define glm_versor_print(...)
#define glm_aabb_print(...)
#endif
#endif /* cglm_io_h */

View File

@@ -63,6 +63,10 @@
# include "simd/sse2/quat.h"
#endif
CGLM_INLINE
void
glm_mat4_identity(mat4 mat);
CGLM_INLINE
void
glm_mat4_mulv(mat4 m, vec4 v, vec4 dest);

View File

@@ -1,77 +0,0 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/
/*
Functions:
CGLM_INLINE bool glm_line_triangle_intersect(vec3 origin,
vec3 direction,
vec3 v0,
vec3 v1,
vec3 v2,
float *d);
*/
#ifndef cglm_ray_h
#define cglm_ray_h
#include "vec3.h"
/*!
* @brief MöllerTrumbore ray-triangle intersection algorithm
*
* @param[in] origin origin of ray
* @param[in] direction direction of ray
* @param[in] v0 first vertex of triangle
* @param[in] v1 second vertex of triangle
* @param[in] v2 third vertex of triangle
* @param[in, out] d distance to intersection
* @return whether there is intersection
*/
CGLM_INLINE
bool
glm_ray_triangle(vec3 origin,
vec3 direction,
vec3 v0,
vec3 v1,
vec3 v2,
float *d) {
vec3 edge1, edge2, p, t, q;
float det, inv_det, u, v, dist;
const float epsilon = 0.000001f;
glm_vec3_sub(v1, v0, edge1);
glm_vec3_sub(v2, v0, edge2);
glm_vec3_cross(direction, edge2, p);
det = glm_vec3_dot(edge1, p);
if (det > -epsilon && det < epsilon)
return false;
inv_det = 1.0f / det;
glm_vec3_sub(origin, v0, t);
u = inv_det * glm_vec3_dot(t, p);
if (u < 0.0f || u > 1.0f)
return false;
glm_vec3_cross(t, edge1, q);
v = inv_det * glm_vec3_dot(direction, q);
if (v < 0.0f || u + v > 1.0f)
return false;
dist = inv_det * glm_vec3_dot(edge2, q);
if (d)
*d = dist;
return dist > epsilon;
}
#endif

View File

@@ -39,6 +39,10 @@
#include "vec4.h"
#include "mat4.h"
CGLM_INLINE
mat4s
glms_mat4_mul(mat4s m1, mat4s m2);
/*!
* @brief translate existing transform matrix by v vector
* and stores result in same matrix

View File

@@ -42,9 +42,9 @@ glms_sphere_radii(vec4s s) {
*/
CGLM_INLINE
vec4s
glms_sphere_transform(vec4s s, mat4s m) {
glms_sphere_transform(vec4s s, mat4 m) {
vec4s r;
glm_sphere_transform(s.raw, m.raw, r.raw);
glm_sphere_transform(s.raw, m, r.raw);
return r;
}

View File

@@ -66,7 +66,7 @@
/*!
* @brief init vec2 using vec2
*
* @param[in] v3 vector3
* @param[in] v4 vector3
* @returns destination
*/
CGLM_INLINE
@@ -455,18 +455,18 @@ glms_vec2_normalize(vec2s v) {
}
/*!
* @brief rotate vec2 by angle using Rodrigues' rotation formula
* @brief rotate vec2 around axis by angle using Rodrigues' rotation formula
*
* @param[in] v vector
* @param[in] axis axis vector (must be unit vector)
* @param[in] angle angle by radians
* @returns rotated vector
*/
CGLM_INLINE
vec2s
glms_vec2_rotate(vec2s v, float angle) {
vec2s r;
glm_vec2_rotate(v.raw, angle, r.raw);
return r;
glms_vec2_rotate(vec2s v, float angle, vec2s axis) {
glm_vec2_rotate(v.raw, angle, axis.raw);
return v;
}
/**

View File

@@ -322,7 +322,7 @@ glm_percent(float from, float to, float current) {
CGLM_INLINE
float
glm_percentc(float from, float to, float current) {
return glm_clamp_zo(glm_percent(from, to, current));
return glm_clamp(glm_percent(from, to, current), 0.0f, 1.0f);
}
/*!

View File

@@ -680,7 +680,7 @@ glm_vec4_negate_to(vec4 v, vec4 dest) {
#if defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_xor_ps(glmm_load(v), _mm_set1_ps(-0.0f)));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vnegq_f32(vld1q_f32(v)));
vst1q_f32(dest, veorq_s32(vld1q_f32(v), vdupq_n_f32(-0.0f)));
#else
dest[0] = -v[0];
dest[1] = -v[1];

View File

@@ -10,6 +10,6 @@
#define CGLM_VERSION_MAJOR 0
#define CGLM_VERSION_MINOR 7
#define CGLM_VERSION_PATCH 4
#define CGLM_VERSION_PATCH 1
#endif /* cglm_version_h */

View File

@@ -1,9 +1,9 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/
#ifndef cglm__config__h_
#define cglm__config__h_

View File

@@ -5,8 +5,6 @@
* Full license can be found in the LICENSE file
*/
#define CGLM_LIB_SRC
#include "../include/cglm/cglm.h"
#include "../include/cglm/call.h"

View File

@@ -1,13 +0,0 @@
#include "../include/cglm/cglm.h"
#include "../include/cglm/call.h"
CGLM_EXPORT
bool
glmc_ray_triangle(vec3 origin,
vec3 direction,
vec3 v0,
vec3 v1,
vec3 v2,
float *d) {
return glm_ray_triangle(origin, direction, v0, v1, v2, d);
}

View File

@@ -1,39 +0,0 @@
cmake_minimum_required(VERSION 3.8.2)
# List all files containing tests. (Change as needed)
set(TESTFILES
runner.c
src/test_euler.c
src/test_bezier.c
src/test_cam.c
src/test_struct.c
src/test_clamp.c
src/test_common.c
src/tests.c
)
set(TEST_MAIN tests)
set(TEST_RUNNER_PARAMS "")
add_executable(${TEST_MAIN} ${TESTFILES})
target_link_libraries(${TEST_MAIN} PRIVATE cglm m)
target_include_directories(${TEST_MAIN} PRIVATE
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/src
)
set_target_properties(${TEST_MAIN} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
if(LDFLAGS)
target_compile_options(${TEST_MAIN} PRIVATE ${LDFLAGS})
endif()
add_test(
NAME cglm.${TEST_MAIN}
COMMAND ${TEST_MAIN} ${TEST_RUNNER_PARAMS})
add_custom_target(check
make
COMMAND ${CMAKE_CTEST_COMMAND} -V
DEPENDS cglm)

View File

@@ -8,9 +8,6 @@
#ifndef tests_common_h
#define tests_common_h
#define _USE_MATH_DEFINES /* for windows */
#define _CRT_SECURE_NO_WARNINGS /* for windows */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

View File

@@ -1,34 +0,0 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/
#include "test_common.h"
TEST_IMPL(GLM_PREFIX, ray_triangle) {
/* Check whether a simple hit is recognized with the right distance */
vec3 origin = { 0.0f, 0.0f, 0.0f};
vec3 direction = { 1.0f, 0.0f, 0.0f};
vec3 opposite = {-1.0f, 0.0f, 0.0f};
vec3 v0 = { 5.0f, -1.0f, 1.0f};
vec3 v1 = { 5.0f, -1.0f, -1.0f};
vec3 v2 = { 5.0f, 1.0f, 0.0f};
float d;
bool hit;
hit = GLM(ray_triangle)(origin, direction, v0, v1, v2, &d);
ASSERT(hit);
ASSERT(fabsf(d - 5.0f) <= 0.0000009);
/* Check whether a simple miss works */
hit = GLM(ray_triangle)(origin, opposite, v0, v1, v2, &d);
ASSERT(!hit);
/* Check that we can disregard distance and pass NULL pointer instead */
hit = GLM(ray_triangle)(origin, direction, v0, v1, v2, NULL);
ASSERT(hit);
TEST_SUCCESS
}

View File

@@ -1,9 +1,9 @@
/*
* Copyright (c), Recep Aslantas.
*
* MIT License (MIT), http://opensource.org/licenses/MIT
* Full license can be found in the LICENSE file
*/
* 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"

View File

@@ -23,7 +23,6 @@
#include "test_plane.h"
#include "test_affine.h"
#include "test_affine_mat.h"
#include "test_ray.h"
#undef GLM
#undef GLM_PREFIX
@@ -45,7 +44,6 @@
#include "test_plane.h"
#include "test_affine.h"
#include "test_affine_mat.h"
#include "test_ray.h"
#undef GLM
#undef GLM_PREFIX

View File

@@ -218,10 +218,6 @@ TEST_DECLARE(clamp)
/* euler */
TEST_DECLARE(euler)
/* ray */
TEST_DECLARE(glm_ray_triangle)
TEST_DECLARE(glmc_ray_triangle)
/* quat */
TEST_DECLARE(MACRO_GLM_QUAT_IDENTITY_INIT)
TEST_DECLARE(MACRO_GLM_QUAT_IDENTITY)
@@ -909,10 +905,6 @@ TEST_LIST {
/* euler */
TEST_ENTRY(euler)
/* ray */
TEST_ENTRY(glm_ray_triangle)
TEST_ENTRY(glmc_ray_triangle)
/* quat */
TEST_ENTRY(MACRO_GLM_QUAT_IDENTITY_INIT)
TEST_ENTRY(MACRO_GLM_QUAT_IDENTITY)

View File

@@ -42,7 +42,6 @@
<ClInclude Include="..\test\src\test_vec2.h" />
<ClInclude Include="..\test\src\test_vec3.h" />
<ClInclude Include="..\test\src\test_vec4.h" />
<ClInclude Include="..\test\src\test_ray.h" />
<ClInclude Include="..\test\tests.h" />
</ItemGroup>
<ItemGroup>

View File

@@ -79,8 +79,5 @@
<ClInclude Include="..\test\src\test_vec2.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\test\src\test_ray.h">
<Filter>src</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -34,7 +34,6 @@
<ClCompile Include="..\src\plane.c" />
<ClCompile Include="..\src\project.c" />
<ClCompile Include="..\src\quat.c" />
<ClCompile Include="..\src\ray.c" />
<ClCompile Include="..\src\sphere.c" />
<ClCompile Include="..\src\vec2.c" />
<ClCompile Include="..\src\vec3.c" />
@@ -62,7 +61,6 @@
<ClInclude Include="..\include\cglm\call\plane.h" />
<ClInclude Include="..\include\cglm\call\project.h" />
<ClInclude Include="..\include\cglm\call\quat.h" />
<ClInclude Include="..\include\cglm\call\ray.h" />
<ClInclude Include="..\include\cglm\call\sphere.h" />
<ClInclude Include="..\include\cglm\call\vec2.h" />
<ClInclude Include="..\include\cglm\call\vec3.h" />
@@ -82,14 +80,12 @@
<ClInclude Include="..\include\cglm\plane.h" />
<ClInclude Include="..\include\cglm\project.h" />
<ClInclude Include="..\include\cglm\quat.h" />
<ClInclude Include="..\include\cglm\ray.h" />
<ClInclude Include="..\include\cglm\simd\arm.h" />
<ClInclude Include="..\include\cglm\simd\avx\affine.h" />
<ClInclude Include="..\include\cglm\simd\avx\mat4.h" />
<ClInclude Include="..\include\cglm\simd\intrin.h" />
<ClInclude Include="..\include\cglm\simd\neon\mat4.h" />
<ClInclude Include="..\include\cglm\simd\sse2\affine.h" />
<ClInclude Include="..\include\cglm\simd\sse2\mat2.h" />
<ClInclude Include="..\include\cglm\simd\sse2\mat3.h" />
<ClInclude Include="..\include\cglm\simd\sse2\mat4.h" />
<ClInclude Include="..\include\cglm\simd\sse2\quat.h" />

View File

@@ -92,9 +92,6 @@
<ClCompile Include="..\src\vec2.c">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\src\ray.c">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\config.h">
@@ -127,9 +124,6 @@
<ClInclude Include="..\include\cglm\call\vec4.h">
<Filter>include\cglm\call</Filter>
</ClInclude>
<ClInclude Include="..\include\cglm\call\ray.h">
<Filter>include\cglm\call</Filter>
</ClInclude>
<ClInclude Include="..\include\cglm\simd\avx\affine.h">
<Filter>include\cglm\simd\avx</Filter>
</ClInclude>
@@ -247,9 +241,6 @@
<ClInclude Include="..\include\cglm\ease.h">
<Filter>include\cglm</Filter>
</ClInclude>
<ClInclude Include="..\include\cglm\ray.h">
<Filter>include\cglm</Filter>
</ClInclude>
<ClInclude Include="..\include\cglm\simd\arm.h">
<Filter>include\cglm\simd</Filter>
</ClInclude>
@@ -355,8 +346,5 @@
<ClInclude Include="..\include\cglm\struct\vec2-ext.h">
<Filter>include\cglm\struct</Filter>
</ClInclude>
<ClInclude Include="..\include\cglm\simd\sse2\mat2.h">
<Filter>include\cglm\simd\sse2</Filter>
</ClInclude>
</ItemGroup>
</Project>