Compare commits

...

15 Commits

Author SHA1 Message Date
Recep Aslantas
95161f7776 Merge pull request #140 from recp/print-io
Print Improvements
2020-05-01 01:12:16 +03:00
Recep Aslantas
f0942c13a1 remove redundant typedef. 2020-05-01 01:07:18 +03:00
Recep Aslantas
8eddeb77d0 win: fix print function for _DEBUG and supress warnings 2020-05-01 01:03:20 +03:00
Recep Aslantas
cbed29820b ios: update docs for prints 2020-04-30 23:49:38 +03:00
Recep Aslantas
3ec6bad5b3 io: open library-called print functions 2020-04-30 23:40:21 +03:00
Recep Aslantas
fefc3dc32d io: print has been maden optional to DEBUG or to CGLM_DEFINE_PRINTS 2020-04-30 23:38:27 +03:00
Recep Aslantas
203d40208c io: new way to print items
* 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
2020-04-30 23:37:51 +03:00
Recep Aslantas
c45445c613 suppress documentation warnings 2020-04-30 10:15:55 +03:00
Recep Aslantas
73c6766806 Update .gitignore 2020-04-30 10:14:12 +03:00
Recep Aslantas
65dff25ed5 build: add version info to cmake 2020-04-28 00:33:29 +03:00
Recep Aslantas
c2584c0fe6 now working on v0.7.3 2020-04-28 00:20:04 +03:00
Recep Aslantas
bd951f96be Update cglm.podspec 2020-04-28 00:18:15 +03:00
Recep Aslantas
1200372ced vscode settings 2020-04-28 00:04:24 +03:00
Recep Aslantas
75a5ca153d Merge branch 'master' of https://github.com/recp/cglm 2020-04-27 22:46:22 +03:00
Recep Aslantas
5a9593d9bc update docs 2020-04-27 22:30:52 +03:00
18 changed files with 249 additions and 94 deletions

2
.gitignore vendored
View File

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

4
.vscode/settings.json vendored Normal file
View File

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

View File

@@ -1,6 +1,11 @@
cmake_minimum_required(VERSION 3.8.2) cmake_minimum_required(VERSION 3.8.2)
project(cglm LANGUAGES C) project(cglm LANGUAGES C)
set(CGLM_VERSION_MAJOR 0)
set(CGLM_VERSION_MINOR 7)
set(CGLM_VERSION_PATCH 3)
set(CGLM_VERSION ${CGLM_VERSION_MAJOR}.${CGLM_VERSION_MINOR}.${CGLM_VERSION_PATCH})
set(C_STANDARD 11) set(C_STANDARD 11)
set(C_STANDARD_REQUIRED YES) set(C_STANDARD_REQUIRED YES)
@@ -163,6 +168,9 @@ add_library(cglm
src/ray.c src/ray.c
) )
set_target_properties(cglm PROPERTIES VERSION ${CGLM_VERSION}
SOVERSION ${CGLM_VERSION_MAJOR})
target_include_directories(cglm PUBLIC target_include_directories(cglm PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/include
) )

View File

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

View File

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

View File

@@ -7,6 +7,46 @@ 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. If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
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): Unix (Autotools):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -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.2' version = u'0.7.3'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = u'0.7.2' release = u'0.7.3'
# 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.

View File

@@ -1,10 +1,11 @@
Features Features
================================================================================ ================================================================================
* array api and struct api, you can use arrays or structs.
* general purpose matrix operations (mat4, mat3) * general purpose matrix operations (mat4, mat3)
* chain matrix multiplication (square only) * chain matrix multiplication (square only)
* general purpose vector operations (cross, dot, rotate, proj, angle...) * general purpose vector operations (cross, dot, rotate, proj, angle...)
* affine transforms * affine transformations
* matrix decomposition (extract rotation, scaling factor) * matrix decomposition (extract rotation, scaling factor)
* optimized affine transform matrices (mul, rigid-body inverse) * optimized affine transform matrices (mul, rigid-body inverse)
* camera (lookat) * camera (lookat)
@@ -20,4 +21,6 @@ Features
* easing functions * easing functions
* curves * curves
* curve interpolation helpers (SMC, deCasteljau...) * curve interpolation helpers (SMC, deCasteljau...)
* and other... * 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...

View File

@@ -28,6 +28,23 @@ Example to print mat4 matrix:
(you probably will in some cases), you can change it temporary. (you probably will in some cases), you can change it temporary.
cglm may provide precision parameter in the future 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): Table of contents (click to go):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -50,3 +50,24 @@ 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. - 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. 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

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

View File

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

View File

@@ -55,8 +55,6 @@ typedef enum glm_euler_seq {
GLM_EULER_ZYX = 2 << 0 | 1 << 2 | 0 << 4 GLM_EULER_ZYX = 2 << 0 | 1 << 2 | 0 << 4
} glm_euler_seq; } glm_euler_seq;
typedef glm_euler_seq glm_euler_sq;
CGLM_INLINE CGLM_INLINE
glm_euler_seq glm_euler_seq
glm_euler_order(int ord[3]) { glm_euler_order(int ord[3]) {

View File

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

View File

@@ -29,7 +29,7 @@
* @param[in] v1 second vertex of triangle * @param[in] v1 second vertex of triangle
* @param[in] v2 third vertex of triangle * @param[in] v2 third vertex of triangle
* @param[in, out] d distance to intersection * @param[in, out] d distance to intersection
* @param[out] intersection whether there is intersection * @return whether there is intersection
*/ */
CGLM_INLINE CGLM_INLINE
@@ -46,34 +46,30 @@ glm_ray_triangle(vec3 origin,
glm_vec3_sub(v1, v0, edge1); glm_vec3_sub(v1, v0, edge1);
glm_vec3_sub(v2, v0, edge2); glm_vec3_sub(v2, v0, edge2);
glm_vec3_cross(direction, edge2, p); glm_vec3_cross(direction, edge2, p);
det = glm_vec3_dot(edge1, p); det = glm_vec3_dot(edge1, p);
if (det > -epsilon && det < epsilon) if (det > -epsilon && det < epsilon)
return 0; return false;
inv_det = 1.0f / det; inv_det = 1.0f / det;
glm_vec3_sub(origin, v0, t); glm_vec3_sub(origin, v0, t);
u = inv_det * glm_vec3_dot(t, p); u = inv_det * glm_vec3_dot(t, p);
if (u < 0.0f || u > 1.0f) if (u < 0.0f || u > 1.0f)
return 0; return false;
glm_vec3_cross(t, edge1, q); glm_vec3_cross(t, edge1, q);
v = inv_det * glm_vec3_dot(direction, q); v = inv_det * glm_vec3_dot(direction, q);
if (v < 0.0f || u + v > 1.0f) if (v < 0.0f || u + v > 1.0f)
return 0; return false;
dist = inv_det * glm_vec3_dot(edge2, q); dist = inv_det * glm_vec3_dot(edge2, q);
if (d) if (d)
*d = dist; *d = dist;
return dist > epsilon; return dist > epsilon;
} }

View File

@@ -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 2 #define CGLM_VERSION_PATCH 3
#endif /* cglm_version_h */ #endif /* cglm_version_h */

View File

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

View File

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