mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8cfc98d283 | ||
|
|
074189163f | ||
|
|
bfbd9ba1dc | ||
|
|
89cee7912a | ||
|
|
da5c66d735 | ||
|
|
c4b45a0917 | ||
|
|
8034073965 | ||
|
|
53009d69c0 | ||
|
|
7c62ad965b | ||
|
|
878e829767 | ||
|
|
7c7ac8b82e | ||
|
|
ba66459708 | ||
|
|
45e176680f | ||
|
|
c0bd65027a | ||
|
|
03d5699f32 | ||
|
|
199d1fa031 | ||
|
|
c7393f75c3 | ||
|
|
a3186a7f32 | ||
|
|
5a89faafff | ||
|
|
51853db559 | ||
|
|
8f8417a883 | ||
|
|
2238fd127c | ||
|
|
073a11a6b8 | ||
|
|
2d348ceba0 | ||
|
|
ce69ecaa5a | ||
|
|
5ad0f1c6f3 | ||
|
|
aea75bbe7c | ||
|
|
7dfe67cdde | ||
|
|
84f64a5b65 | ||
|
|
7df8ffa7fe | ||
|
|
dc5558d8f4 | ||
|
|
63990be905 | ||
|
|
cd0ae19459 | ||
|
|
838124af49 | ||
|
|
e3981b6d96 | ||
|
|
7bb765367e | ||
|
|
82982abaef | ||
|
|
dbe3b719c7 | ||
|
|
09155986fe | ||
|
|
1b3e2fdaec | ||
|
|
4aef2510e9 | ||
|
|
2432970f90 | ||
|
|
d1bdfde48d | ||
|
|
f27e26f632 | ||
|
|
a3265ebe84 | ||
|
|
57ec29bd31 | ||
|
|
1b217c3dd0 | ||
|
|
94a1e6f6e1 | ||
|
|
a1a2a046a4 | ||
|
|
bffaa13bd5 | ||
|
|
cd4d0a1efe | ||
|
|
8916c50a3d | ||
|
|
7a19b8f8a3 | ||
|
|
f587c00f26 | ||
|
|
65409bcda1 | ||
|
|
d2957e6275 | ||
|
|
04bd1bd633 | ||
|
|
db1a23d13c | ||
|
|
a85744430a | ||
|
|
d582146d9a | ||
|
|
ee09707c1c | ||
|
|
4c85b970a9 | ||
|
|
f7f0f66193 | ||
|
|
495b98a54d | ||
|
|
aee47ce545 | ||
|
|
52debe6a04 | ||
|
|
cf7f4231f0 | ||
|
|
7e5d1f435f | ||
|
|
851a58cedb | ||
|
|
6fa1cefcc2 | ||
|
|
7e211e1f49 | ||
|
|
7d47b7f1fd | ||
|
|
2a4748d452 | ||
|
|
f20bf0aaaf |
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
github: [recp]
|
||||||
patreon: # Replace with a single Patreon username
|
patreon: recp
|
||||||
open_collective: cglm
|
open_collective: cglm
|
||||||
ko_fi: # Replace with a single Ko-fi username
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -79,3 +79,4 @@ confdefs.h
|
|||||||
.idea
|
.idea
|
||||||
cmake-build-debug
|
cmake-build-debug
|
||||||
*.o.tmp
|
*.o.tmp
|
||||||
|
xcode/*
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
cmake_minimum_required(VERSION 3.8.2)
|
cmake_minimum_required(VERSION 3.8.2)
|
||||||
project(cglm VERSION 0.8.5 LANGUAGES C)
|
project(cglm
|
||||||
|
VERSION 0.8.7
|
||||||
|
HOMEPAGE_URL https://github.com/recp/cglm
|
||||||
|
DESCRIPTION "OpenGL Mathematics (glm) for C"
|
||||||
|
LANGUAGES C
|
||||||
|
)
|
||||||
|
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED YES)
|
set(CMAKE_C_STANDARD_REQUIRED YES)
|
||||||
@@ -61,8 +66,11 @@ add_library(${PROJECT_NAME}
|
|||||||
src/quat.c
|
src/quat.c
|
||||||
src/cam.c
|
src/cam.c
|
||||||
src/vec2.c
|
src/vec2.c
|
||||||
|
src/ivec2.c
|
||||||
src/vec3.c
|
src/vec3.c
|
||||||
|
src/ivec3.c
|
||||||
src/vec4.c
|
src/vec4.c
|
||||||
|
src/ivec4.c
|
||||||
src/mat2.c
|
src/mat2.c
|
||||||
src/mat3.c
|
src/mat3.c
|
||||||
src/mat4.c
|
src/mat4.c
|
||||||
@@ -76,18 +84,20 @@ add_library(${PROJECT_NAME}
|
|||||||
src/bezier.c
|
src/bezier.c
|
||||||
src/ray.c
|
src/ray.c
|
||||||
src/affine2d.c
|
src/affine2d.c
|
||||||
src/clipspace/persp_lh_zo.c
|
|
||||||
src/clipspace/persp_rh_zo.c
|
|
||||||
src/clipspace/persp_lh_no.c
|
|
||||||
src/clipspace/persp_rh_no.c
|
|
||||||
src/clipspace/ortho_lh_zo.c
|
|
||||||
src/clipspace/ortho_rh_zo.c
|
|
||||||
src/clipspace/ortho_lh_no.c
|
src/clipspace/ortho_lh_no.c
|
||||||
|
src/clipspace/ortho_lh_zo.c
|
||||||
src/clipspace/ortho_rh_no.c
|
src/clipspace/ortho_rh_no.c
|
||||||
src/clipspace/view_lh_zo.c
|
src/clipspace/ortho_rh_zo.c
|
||||||
src/clipspace/view_rh_zo.c
|
src/clipspace/persp_lh_no.c
|
||||||
|
src/clipspace/persp_lh_zo.c
|
||||||
|
src/clipspace/persp_rh_no.c
|
||||||
|
src/clipspace/persp_rh_zo.c
|
||||||
src/clipspace/view_lh_no.c
|
src/clipspace/view_lh_no.c
|
||||||
|
src/clipspace/view_lh_zo.c
|
||||||
src/clipspace/view_rh_no.c
|
src/clipspace/view_rh_no.c
|
||||||
|
src/clipspace/view_rh_zo.c
|
||||||
|
src/clipspace/project_no.c
|
||||||
|
src/clipspace/project_zo.c
|
||||||
)
|
)
|
||||||
|
|
||||||
if(CGLM_SHARED)
|
if(CGLM_SHARED)
|
||||||
@@ -147,13 +157,7 @@ install(EXPORT ${PROJECT_NAME}
|
|||||||
NAMESPACE ${PROJECT_NAME}::
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
||||||
|
|
||||||
set(PACKAGE_NAME ${PROJECT_NAME})
|
configure_file(cglm.pc.in cglm.pc @ONLY)
|
||||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
|
||||||
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
|
|
||||||
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
|
|
||||||
set(libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
|
|
||||||
set(PACKAGE_VERSION "${PROJECT_VERSION}")
|
|
||||||
configure_file(${CMAKE_CURRENT_LIST_DIR}/cglm.pc.in ${CMAKE_BINARY_DIR}/cglm.pc @ONLY)
|
|
||||||
|
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/cglm.pc
|
install(FILES ${CMAKE_BINARY_DIR}/cglm.pc
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
|||||||
75
Makefile.am
75
Makefile.am
@@ -45,17 +45,22 @@ cglm_HEADERS = include/cglm/version.h \
|
|||||||
include/cglm/mat4.h \
|
include/cglm/mat4.h \
|
||||||
include/cglm/mat3.h \
|
include/cglm/mat3.h \
|
||||||
include/cglm/mat2.h \
|
include/cglm/mat2.h \
|
||||||
|
include/cglm/affine-pre.h \
|
||||||
|
include/cglm/affine-post.h \
|
||||||
include/cglm/affine.h \
|
include/cglm/affine.h \
|
||||||
|
include/cglm/affine-mat.h \
|
||||||
include/cglm/vec2.h \
|
include/cglm/vec2.h \
|
||||||
include/cglm/vec2-ext.h \
|
include/cglm/vec2-ext.h \
|
||||||
|
include/cglm/ivec2.h \
|
||||||
include/cglm/vec3.h \
|
include/cglm/vec3.h \
|
||||||
include/cglm/vec3-ext.h \
|
include/cglm/vec3-ext.h \
|
||||||
|
include/cglm/ivec3.h \
|
||||||
include/cglm/vec4.h \
|
include/cglm/vec4.h \
|
||||||
include/cglm/vec4-ext.h \
|
include/cglm/vec4-ext.h \
|
||||||
|
include/cglm/ivec4.h \
|
||||||
include/cglm/euler.h \
|
include/cglm/euler.h \
|
||||||
include/cglm/util.h \
|
include/cglm/util.h \
|
||||||
include/cglm/quat.h \
|
include/cglm/quat.h \
|
||||||
include/cglm/affine-mat.h \
|
|
||||||
include/cglm/plane.h \
|
include/cglm/plane.h \
|
||||||
include/cglm/frustum.h \
|
include/cglm/frustum.h \
|
||||||
include/cglm/box.h \
|
include/cglm/box.h \
|
||||||
@@ -71,22 +76,22 @@ cglm_HEADERS = include/cglm/version.h \
|
|||||||
|
|
||||||
cglm_clipspacedir=$(includedir)/cglm/clipspace
|
cglm_clipspacedir=$(includedir)/cglm/clipspace
|
||||||
cglm_clipspace_HEADERS = include/cglm/clipspace/persp.h \
|
cglm_clipspace_HEADERS = include/cglm/clipspace/persp.h \
|
||||||
include/cglm/clipspace/persp_lh_zo.h \
|
|
||||||
include/cglm/clipspace/persp_rh_zo.h \
|
|
||||||
include/cglm/clipspace/persp_lh_no.h \
|
include/cglm/clipspace/persp_lh_no.h \
|
||||||
|
include/cglm/clipspace/persp_lh_zo.h \
|
||||||
include/cglm/clipspace/persp_rh_no.h \
|
include/cglm/clipspace/persp_rh_no.h \
|
||||||
include/cglm/clipspace/ortho_lh_zo.h \
|
include/cglm/clipspace/persp_rh_zo.h \
|
||||||
include/cglm/clipspace/ortho_rh_zo.h \
|
|
||||||
include/cglm/clipspace/ortho_lh_no.h \
|
include/cglm/clipspace/ortho_lh_no.h \
|
||||||
|
include/cglm/clipspace/ortho_lh_zo.h \
|
||||||
include/cglm/clipspace/ortho_rh_no.h \
|
include/cglm/clipspace/ortho_rh_no.h \
|
||||||
|
include/cglm/clipspace/ortho_rh_zo.h \
|
||||||
include/cglm/clipspace/view_lh.h \
|
include/cglm/clipspace/view_lh.h \
|
||||||
include/cglm/clipspace/view_rh.h \
|
include/cglm/clipspace/view_rh.h \
|
||||||
include/cglm/clipspace/view_lh_zo.h \
|
|
||||||
include/cglm/clipspace/view_rh_zo.h \
|
|
||||||
include/cglm/clipspace/view_lh_no.h \
|
include/cglm/clipspace/view_lh_no.h \
|
||||||
|
include/cglm/clipspace/view_lh_zo.h \
|
||||||
include/cglm/clipspace/view_rh_no.h \
|
include/cglm/clipspace/view_rh_no.h \
|
||||||
include/cglm/clipspace/project_zo.h \
|
include/cglm/clipspace/view_rh_zo.h \
|
||||||
include/cglm/clipspace/project_no.h
|
include/cglm/clipspace/project_no.h \
|
||||||
|
include/cglm/clipspace/project_zo.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 \
|
||||||
@@ -95,7 +100,9 @@ cglm_call_HEADERS = include/cglm/call/mat4.h \
|
|||||||
include/cglm/call/vec2.h \
|
include/cglm/call/vec2.h \
|
||||||
include/cglm/call/vec3.h \
|
include/cglm/call/vec3.h \
|
||||||
include/cglm/call/vec4.h \
|
include/cglm/call/vec4.h \
|
||||||
include/cglm/call/affine.h \
|
include/cglm/call/ivec2.h \
|
||||||
|
include/cglm/call/ivec3.h \
|
||||||
|
include/cglm/call/ivec4.h \
|
||||||
include/cglm/call/io.h \
|
include/cglm/call/io.h \
|
||||||
include/cglm/call/cam.h \
|
include/cglm/call/cam.h \
|
||||||
include/cglm/call/quat.h \
|
include/cglm/call/quat.h \
|
||||||
@@ -109,21 +116,22 @@ cglm_call_HEADERS = include/cglm/call/mat4.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/affine.h \
|
||||||
include/cglm/call/affine2d.h
|
include/cglm/call/affine2d.h
|
||||||
|
|
||||||
cglm_call_clipspacedir=$(includedir)/cglm/call/clipspace
|
cglm_call_clipspacedir=$(includedir)/cglm/call/clipspace
|
||||||
cglm_call_clipspace_HEADERS = include/cglm/call/clipspace/persp_lh_zo.h \
|
cglm_call_clipspace_HEADERS = include/cglm/call/clipspace/persp_lh_no.h \
|
||||||
include/cglm/call/clipspace/persp_rh_zo.h \
|
include/cglm/call/clipspace/persp_lh_zo.h \
|
||||||
include/cglm/call/clipspace/persp_lh_no.h \
|
|
||||||
include/cglm/call/clipspace/persp_rh_no.h \
|
include/cglm/call/clipspace/persp_rh_no.h \
|
||||||
include/cglm/call/clipspace/ortho_lh_zo.h \
|
include/cglm/call/clipspace/persp_rh_zo.h \
|
||||||
include/cglm/call/clipspace/ortho_rh_zo.h \
|
|
||||||
include/cglm/call/clipspace/ortho_lh_no.h \
|
include/cglm/call/clipspace/ortho_lh_no.h \
|
||||||
|
include/cglm/call/clipspace/ortho_lh_zo.h \
|
||||||
include/cglm/call/clipspace/ortho_rh_no.h \
|
include/cglm/call/clipspace/ortho_rh_no.h \
|
||||||
include/cglm/call/clipspace/view_lh_zo.h \
|
include/cglm/call/clipspace/ortho_rh_zo.h \
|
||||||
include/cglm/call/clipspace/view_rh_zo.h \
|
|
||||||
include/cglm/call/clipspace/view_lh_no.h \
|
include/cglm/call/clipspace/view_lh_no.h \
|
||||||
|
include/cglm/call/clipspace/view_lh_zo.h \
|
||||||
include/cglm/call/clipspace/view_rh_no.h \
|
include/cglm/call/clipspace/view_rh_no.h \
|
||||||
|
include/cglm/call/clipspace/view_rh_zo.h \
|
||||||
include/cglm/call/clipspace/project_no.h \
|
include/cglm/call/clipspace/project_no.h \
|
||||||
include/cglm/call/clipspace/project_zo.h
|
include/cglm/call/clipspace/project_zo.h
|
||||||
|
|
||||||
@@ -144,22 +152,25 @@ cglm_simd_avx_HEADERS = include/cglm/simd/avx/mat4.h \
|
|||||||
include/cglm/simd/avx/affine.h
|
include/cglm/simd/avx/affine.h
|
||||||
|
|
||||||
cglm_simd_neondir=$(includedir)/cglm/simd/neon
|
cglm_simd_neondir=$(includedir)/cglm/simd/neon
|
||||||
cglm_simd_neon_HEADERS = include/cglm/simd/neon/mat4.h \
|
cglm_simd_neon_HEADERS = include/cglm/simd/neon/affine.h \
|
||||||
include/cglm/simd/neon/mat2.h \
|
include/cglm/simd/neon/mat2.h \
|
||||||
include/cglm/simd/neon/affine.h \
|
include/cglm/simd/neon/mat4.h \
|
||||||
include/cglm/simd/neon/quat.h
|
include/cglm/simd/neon/quat.h
|
||||||
|
|
||||||
cglm_structdir=$(includedir)/cglm/struct
|
cglm_structdir=$(includedir)/cglm/struct
|
||||||
cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
||||||
include/cglm/struct/mat3.h \
|
include/cglm/struct/mat3.h \
|
||||||
include/cglm/struct/mat2.h \
|
include/cglm/struct/mat2.h \
|
||||||
|
include/cglm/struct/affine-pre.h \
|
||||||
|
include/cglm/struct/affine-post.h \
|
||||||
|
include/cglm/struct/affine.h \
|
||||||
|
include/cglm/struct/affine2d.h \
|
||||||
include/cglm/struct/vec2.h \
|
include/cglm/struct/vec2.h \
|
||||||
include/cglm/struct/vec2-ext.h \
|
include/cglm/struct/vec2-ext.h \
|
||||||
include/cglm/struct/vec3.h \
|
include/cglm/struct/vec3.h \
|
||||||
include/cglm/struct/vec3-ext.h \
|
include/cglm/struct/vec3-ext.h \
|
||||||
include/cglm/struct/vec4.h \
|
include/cglm/struct/vec4.h \
|
||||||
include/cglm/struct/vec4-ext.h \
|
include/cglm/struct/vec4-ext.h \
|
||||||
include/cglm/struct/affine.h \
|
|
||||||
include/cglm/struct/io.h \
|
include/cglm/struct/io.h \
|
||||||
include/cglm/struct/cam.h \
|
include/cglm/struct/cam.h \
|
||||||
include/cglm/struct/quat.h \
|
include/cglm/struct/quat.h \
|
||||||
@@ -170,22 +181,23 @@ 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
|
|
||||||
|
|
||||||
cglm_struct_clipspacedir=$(includedir)/cglm/struct/clipspace
|
cglm_struct_clipspacedir=$(includedir)/cglm/struct/clipspace
|
||||||
cglm_struct_clipspace_HEADERS = include/cglm/struct/clipspace/persp_lh_zo.h \
|
cglm_struct_clipspace_HEADERS = include/cglm/struct/clipspace/persp_lh_no.h \
|
||||||
include/cglm/struct/clipspace/persp_rh_zo.h \
|
include/cglm/struct/clipspace/persp_lh_zo.h \
|
||||||
include/cglm/struct/clipspace/persp_lh_no.h \
|
|
||||||
include/cglm/struct/clipspace/persp_rh_no.h \
|
include/cglm/struct/clipspace/persp_rh_no.h \
|
||||||
include/cglm/struct/clipspace/ortho_lh_zo.h \
|
include/cglm/struct/clipspace/persp_rh_zo.h \
|
||||||
include/cglm/struct/clipspace/ortho_rh_zo.h \
|
|
||||||
include/cglm/struct/clipspace/ortho_lh_no.h \
|
include/cglm/struct/clipspace/ortho_lh_no.h \
|
||||||
|
include/cglm/struct/clipspace/ortho_lh_zo.h \
|
||||||
include/cglm/struct/clipspace/ortho_rh_no.h \
|
include/cglm/struct/clipspace/ortho_rh_no.h \
|
||||||
include/cglm/struct/clipspace/view_lh_zo.h \
|
include/cglm/struct/clipspace/ortho_rh_zo.h \
|
||||||
include/cglm/struct/clipspace/view_rh_zo.h \
|
|
||||||
include/cglm/struct/clipspace/view_lh_no.h \
|
include/cglm/struct/clipspace/view_lh_no.h \
|
||||||
include/cglm/struct/clipspace/view_rh_no.h
|
include/cglm/struct/clipspace/view_lh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/view_rh_no.h \
|
||||||
|
include/cglm/struct/clipspace/view_rh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/project_no.h \
|
||||||
|
include/cglm/struct/clipspace/project_zo.h
|
||||||
|
|
||||||
libcglm_la_SOURCES=\
|
libcglm_la_SOURCES=\
|
||||||
src/euler.c \
|
src/euler.c \
|
||||||
@@ -194,8 +206,11 @@ libcglm_la_SOURCES=\
|
|||||||
src/quat.c \
|
src/quat.c \
|
||||||
src/cam.c \
|
src/cam.c \
|
||||||
src/vec2.c \
|
src/vec2.c \
|
||||||
|
src/ivec2.c \
|
||||||
src/vec3.c \
|
src/vec3.c \
|
||||||
|
src/ivec3.c \
|
||||||
src/vec4.c \
|
src/vec4.c \
|
||||||
|
src/ivec4.c \
|
||||||
src/mat2.c \
|
src/mat2.c \
|
||||||
src/mat3.c \
|
src/mat3.c \
|
||||||
src/mat4.c \
|
src/mat4.c \
|
||||||
|
|||||||
@@ -431,7 +431,7 @@ You can pass matrices the same way to other APIs e.g. Vulkan, DX...
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- This library uses float types only, does not support Integers, Double... yet
|
- This library does not support double type... yet
|
||||||
- If headers are not working properly with your compiler, IDE please open an issue, because I'm using GCC and clang to test it maybe sometimes MSVC
|
- If headers are not working properly with your compiler, IDE please open an issue, because I'm using GCC and clang to test it maybe sometimes MSVC
|
||||||
|
|
||||||
**TODO:**
|
**TODO:**
|
||||||
|
|||||||
16
cglm.pc.in
16
cglm.pc.in
@@ -1,11 +1,11 @@
|
|||||||
prefix=@prefix@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix="${prefix}"
|
||||||
libdir=@libdir@
|
libdir="${exec_prefix}/lib"
|
||||||
includedir=@includedir@
|
includedir="${prefix}/include"
|
||||||
|
|
||||||
Name: @PACKAGE_NAME@
|
Name: @PROJECT_NAME@
|
||||||
Description: OpenGL Mathematics (glm) for C
|
Description: @CMAKE_PROJECT_DESCRIPTION@
|
||||||
URL: https://github.com/recp/cglm
|
URL: @CMAKE_PROJECT_HOMEPAGE_URL@
|
||||||
Version: @PACKAGE_VERSION@
|
Version: @PROJECT_VERSION@
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
Libs: -L${libdir} -lcglm @LIBS@
|
Libs: -L${libdir} -lcglm @LIBS@
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AC_INIT([cglm], [0.8.5], [info@recp.me])
|
AC_INIT([cglm], [0.8.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.
|
||||||
|
|||||||
129
docs/source/affine-common.rst
Normal file
129
docs/source/affine-common.rst
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
3D Affine Transforms (common)
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Common transfrom functions.
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_translate_make`
|
||||||
|
#. :c:func:`glm_scale_to`
|
||||||
|
#. :c:func:`glm_scale_make`
|
||||||
|
#. :c:func:`glm_scale`
|
||||||
|
#. :c:func:`glm_scale_uni`
|
||||||
|
#. :c:func:`glm_rotate_make`
|
||||||
|
#. :c:func:`glm_rotate_atm`
|
||||||
|
#. :c:func:`glm_decompose_scalev`
|
||||||
|
#. :c:func:`glm_uniscaled`
|
||||||
|
#. :c:func:`glm_decompose_rs`
|
||||||
|
#. :c:func:`glm_decompose`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate_make(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
creates NEW translate transform matrix by *v* vector.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
||||||
|
|
||||||
|
scale existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
| *[out]* **dest** scaled matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale_make(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
creates NEW scale matrix by v vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
scales existing transform matrix by v vector
|
||||||
|
and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
||||||
|
|
||||||
|
applies uniform scale to existing transform matrix v = [s, s, s]
|
||||||
|
and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
|
creates NEW rotation matrix by angle and axis,
|
||||||
|
axis will be normalized so you don't need to normalize it
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **m** affine transfrom
|
||||||
|
| *[in]* **axis** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis)
|
||||||
|
|
||||||
|
| creates NEW rotation matrix by angle and axis at given point
|
||||||
|
| this creates rotation matrix, it assumes you don't have a matrix
|
||||||
|
|
||||||
|
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_decompose_scalev(mat4 m, vec3 s)
|
||||||
|
|
||||||
|
decompose scale vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transform
|
||||||
|
| *[out]* **s** scale vector (Sx, Sy, Sz)
|
||||||
|
|
||||||
|
.. c:function:: bool glm_uniscaled(mat4 m)
|
||||||
|
|
||||||
|
returns true if matrix is uniform scaled.
|
||||||
|
This is helpful for creating normal matrix.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_decompose_rs(mat4 m, mat4 r, vec3 s)
|
||||||
|
|
||||||
|
decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz]
|
||||||
|
DON'T pass projected matrix here
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transform
|
||||||
|
| *[out]* **r** rotation matrix
|
||||||
|
| *[out]* **s** scale matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s)
|
||||||
|
|
||||||
|
decompose affine transform, TODO: extract shear factors.
|
||||||
|
DON'T pass projected matrix here
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[out]* **t** translation vector
|
||||||
|
| *[out]* **r** rotation matrix (mat4)
|
||||||
|
| *[out]* **s** scaling vector [X, Y, Z]
|
||||||
129
docs/source/affine-post.rst
Normal file
129
docs/source/affine-post.rst
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
3D Affine Transforms (post)
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Post transfrom functions are similar to pre transform functions except order of application is reversed.
|
||||||
|
Post transform functions are applied after the object is transformed with given (model matrix) transfrom.
|
||||||
|
|
||||||
|
Ther are named af
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_translated_to`
|
||||||
|
#. :c:func:`glm_translated`
|
||||||
|
#. :c:func:`glm_translated_x`
|
||||||
|
#. :c:func:`glm_translated_y`
|
||||||
|
#. :c:func:`glm_translated_z`
|
||||||
|
#. :c:func:`glm_rotated_x`
|
||||||
|
#. :c:func:`glm_rotated_y`
|
||||||
|
#. :c:func:`glm_rotated_z`
|
||||||
|
#. :c:func:`glm_rotated`
|
||||||
|
#. :c:func:`glm_rotated_at`
|
||||||
|
#. :c:func:`glm_spinned`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_translated_to(mat4 m, vec3 v, mat4 dest)
|
||||||
|
|
||||||
|
translate existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
| *[out]* **dest** translated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_translated(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
translate existing transform matrix by *v* vector
|
||||||
|
and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_translated_x(mat4 m, float x)
|
||||||
|
|
||||||
|
translate existing transform matrix by x factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** x factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translated_y(mat4 m, float y)
|
||||||
|
|
||||||
|
translate existing transform matrix by *y* factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** y factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translated_z(mat4 m, float z)
|
||||||
|
|
||||||
|
translate existing transform matrix by *z* factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** z factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotated_x(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
|
rotate existing transform matrix around X axis by angle
|
||||||
|
and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotated_y(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
|
rotate existing transform matrix around Y axis by angle
|
||||||
|
and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotated_z(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
|
rotate existing 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
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotated(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
|
rotate existing transform matrix around Z axis by angle and axis
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis)
|
||||||
|
|
||||||
|
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_spinned(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
|
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
240
docs/source/affine-pre.rst
Normal file
240
docs/source/affine-pre.rst
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
3D Affine Transforms (pre)
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Pre transfrom functions which are regular transfrom functions.
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_translate_to`
|
||||||
|
#. :c:func:`glm_translate`
|
||||||
|
#. :c:func:`glm_translate_x`
|
||||||
|
#. :c:func:`glm_translate_y`
|
||||||
|
#. :c:func:`glm_translate_z`
|
||||||
|
#. :c:func:`glm_translate_make`
|
||||||
|
#. :c:func:`glm_scale_to`
|
||||||
|
#. :c:func:`glm_scale_make`
|
||||||
|
#. :c:func:`glm_scale`
|
||||||
|
#. :c:func:`glm_scale_uni`
|
||||||
|
#. :c:func:`glm_rotate_x`
|
||||||
|
#. :c:func:`glm_rotate_y`
|
||||||
|
#. :c:func:`glm_rotate_z`
|
||||||
|
#. :c:func:`glm_rotate_make`
|
||||||
|
#. :c:func:`glm_rotate`
|
||||||
|
#. :c:func:`glm_rotate_at`
|
||||||
|
#. :c:func:`glm_rotate_atm`
|
||||||
|
#. :c:func:`glm_decompose_scalev`
|
||||||
|
#. :c:func:`glm_uniscaled`
|
||||||
|
#. :c:func:`glm_decompose_rs`
|
||||||
|
#. :c:func:`glm_decompose`
|
||||||
|
#. :c:func:`glm_spin`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate_to(mat4 m, vec3 v, mat4 dest)
|
||||||
|
|
||||||
|
translate existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
| *[out]* **dest** translated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
translate existing transform matrix by *v* vector
|
||||||
|
and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate_x(mat4 m, float x)
|
||||||
|
|
||||||
|
translate existing transform matrix by x factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** x factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate_y(mat4 m, float y)
|
||||||
|
|
||||||
|
translate existing transform matrix by *y* factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** y factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate_z(mat4 m, float z)
|
||||||
|
|
||||||
|
translate existing transform matrix by *z* factor
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** z factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_translate_make(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
creates NEW translate transform matrix by *v* vector.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
||||||
|
|
||||||
|
scale existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
| *[out]* **dest** scaled matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale_make(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
creates NEW scale matrix by v vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
||||||
|
|
||||||
|
scales existing transform matrix by v vector
|
||||||
|
and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
||||||
|
|
||||||
|
applies uniform scale to existing transform matrix v = [s, s, s]
|
||||||
|
and stores result in same matrix
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **v** scale factor
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_x(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
|
rotate existing transform matrix around X axis by angle
|
||||||
|
and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_y(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
|
rotate existing transform matrix around Y axis by angle
|
||||||
|
and store result in dest
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_z(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
|
rotate existing 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
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
|
creates NEW rotation matrix by angle and axis,
|
||||||
|
axis will be normalized so you don't need to normalize it
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **m** affine transfrom
|
||||||
|
| *[in]* **axis** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
|
rotate existing transform matrix around Z axis by angle and axis
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis)
|
||||||
|
|
||||||
|
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis)
|
||||||
|
|
||||||
|
| creates NEW rotation matrix by angle and axis at given point
|
||||||
|
| this creates rotation matrix, it assumes you don't have a matrix
|
||||||
|
|
||||||
|
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
|
.. c:function:: void glm_decompose_scalev(mat4 m, vec3 s)
|
||||||
|
|
||||||
|
decompose scale vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transform
|
||||||
|
| *[out]* **s** scale vector (Sx, Sy, Sz)
|
||||||
|
|
||||||
|
.. c:function:: bool glm_uniscaled(mat4 m)
|
||||||
|
|
||||||
|
returns true if matrix is uniform scaled.
|
||||||
|
This is helpful for creating normal matrix.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_decompose_rs(mat4 m, mat4 r, vec3 s)
|
||||||
|
|
||||||
|
decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz]
|
||||||
|
DON'T pass projected matrix here
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transform
|
||||||
|
| *[out]* **r** rotation matrix
|
||||||
|
| *[out]* **s** scale matrix
|
||||||
|
|
||||||
|
.. c:function:: void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s)
|
||||||
|
|
||||||
|
decompose affine transform, TODO: extract shear factors.
|
||||||
|
DON'T pass projected matrix here
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **m** affine transfrom
|
||||||
|
| *[out]* **t** translation vector
|
||||||
|
| *[out]* **r** rotation matrix (mat4)
|
||||||
|
| *[out]* **s** scaling vector [X, Y, Z]
|
||||||
|
|
||||||
|
.. c:function:: void glm_spin(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
|
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **m** affine transfrom
|
||||||
|
| *[in]* **angle** angle (radians)
|
||||||
|
| *[in]* **axis** axis
|
||||||
@@ -5,6 +5,18 @@
|
|||||||
|
|
||||||
Header: cglm/affine.h
|
Header: cglm/affine.h
|
||||||
|
|
||||||
|
Before starting, **cglm** provides two kind of transform functions; pre and post.
|
||||||
|
|
||||||
|
Pre functions (`T' = Tnew * T`) are like `glm_translate`, `glm_rotate` which means it will translate the vector first and then apply the model transformation.
|
||||||
|
Post functions (`T' = T * Tnew`) are like `glm_translated`, `glm_rotated` which means it will apply the model transformation first and then translate the vector.
|
||||||
|
|
||||||
|
`glm_translate`, `glm_rotate` are pre functions and are similar to C++ **glm** which you are familiar with.
|
||||||
|
|
||||||
|
In new versions of **cglm** we added `glm_translated`, `glm_rotated`... which are post functions,
|
||||||
|
they are useful in some cases, e.g. append transform to existing transform (apply/append transform as last transfrom T' = T * Tnew).
|
||||||
|
|
||||||
|
Post functions are named after pre functions with `ed` suffix, e.g. `glm_translate` -> `glm_translated`. So don't mix them up.
|
||||||
|
|
||||||
Initialize Transform Matrices
|
Initialize Transform Matrices
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Functions with **_make** prefix expect you don't have a matrix and they create
|
Functions with **_make** prefix expect you don't have a matrix and they create
|
||||||
@@ -25,6 +37,9 @@ since scale factors are stored in rotation matrix, same may also true for scalli
|
|||||||
cglm provides some functions for rotating around at given point e.g.
|
cglm provides some functions for rotating around at given point e.g.
|
||||||
**glm_rotate_at**, **glm_quat_rotate_at**. Use them or follow next section for algorihm ("Rotate or Scale around specific Point (Pivot Point / Anchor Point)").
|
**glm_rotate_at**, **glm_quat_rotate_at**. Use them or follow next section for algorihm ("Rotate or Scale around specific Point (Pivot Point / Anchor Point)").
|
||||||
|
|
||||||
|
Also **cglm** provides :c:func:`glm_spin` and :c:func:`glm_spinned` functions to rotate around itself. No need to give pivot.
|
||||||
|
These functions are useful for rotating around center of object.
|
||||||
|
|
||||||
Rotate or Scale around specific Point (Anchor Point)
|
Rotate or Scale around specific Point (Anchor Point)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -35,6 +50,7 @@ If you want to rotate model around arbibtrary point follow these steps:
|
|||||||
3. Move model back from origin to pivot (reverse of step-1): **translate(pivot.x, pivot.y, pivot.z)**
|
3. Move model back from origin to pivot (reverse of step-1): **translate(pivot.x, pivot.y, pivot.z)**
|
||||||
|
|
||||||
**glm_rotate_at**, **glm_quat_rotate_at** and their helper functions works that way.
|
**glm_rotate_at**, **glm_quat_rotate_at** and their helper functions works that way.
|
||||||
|
So if you use them you don't need to do these steps manually which are done by **cglm**.
|
||||||
|
|
||||||
The implementation would be:
|
The implementation would be:
|
||||||
|
|
||||||
@@ -45,6 +61,13 @@ 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 */
|
||||||
|
|
||||||
|
or just:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
glm_rotate_at(m, pivot, angle, axis);
|
||||||
|
|
||||||
.. _TransformsOrder:
|
.. _TransformsOrder:
|
||||||
|
|
||||||
Transforms Order
|
Transforms Order
|
||||||
@@ -54,7 +77,7 @@ It is important to understand this part especially if you call transform
|
|||||||
functions multiple times
|
functions multiple times
|
||||||
|
|
||||||
`glm_translate`, `glm_rotate`, `glm_scale` and `glm_quat_rotate` and their
|
`glm_translate`, `glm_rotate`, `glm_scale` and `glm_quat_rotate` and their
|
||||||
helpers functions works like this (cglm may provide reverse order too as alternative in the future):
|
helpers functions works like this (cglm provides reverse order as `ed` suffix e.g `glm_translated`, `glm_rotated` see post transforms):
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
:linenos:
|
:linenos:
|
||||||
@@ -147,199 +170,27 @@ Functions:
|
|||||||
#. :c:func:`glm_decompose_rs`
|
#. :c:func:`glm_decompose_rs`
|
||||||
#. :c:func:`glm_decompose`
|
#. :c:func:`glm_decompose`
|
||||||
|
|
||||||
|
Post functions (**NEW**):
|
||||||
|
|
||||||
|
1. :c:func:`glm_translated_to`
|
||||||
|
#. :c:func:`glm_translated`
|
||||||
|
#. :c:func:`glm_translated_x`
|
||||||
|
#. :c:func:`glm_translated_y`
|
||||||
|
#. :c:func:`glm_translated_z`
|
||||||
|
#. :c:func:`glm_rotated_x`
|
||||||
|
#. :c:func:`glm_rotated_y`
|
||||||
|
#. :c:func:`glm_rotated_z`
|
||||||
|
#. :c:func:`glm_rotated`
|
||||||
|
#. :c:func:`glm_rotated_at`
|
||||||
|
#. :c:func:`glm_spinned`
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. c:function:: void glm_translate_to(mat4 m, vec3 v, mat4 dest)
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:caption: Affine categories:
|
||||||
|
|
||||||
translate existing transform matrix by *v* vector and store result in dest
|
affine-common
|
||||||
|
affine-pre
|
||||||
Parameters:
|
affine-post
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
|
||||||
| *[out]* **dest** translated matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_translate(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
translate existing transform matrix by *v* vector
|
|
||||||
and stores result in same matrix
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_translate_x(mat4 m, float x)
|
|
||||||
|
|
||||||
translate existing transform matrix by x factor
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** x factor
|
|
||||||
|
|
||||||
.. c:function:: void glm_translate_y(mat4 m, float y)
|
|
||||||
|
|
||||||
translate existing transform matrix by *y* factor
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** y factor
|
|
||||||
|
|
||||||
.. c:function:: void glm_translate_z(mat4 m, float z)
|
|
||||||
|
|
||||||
translate existing transform matrix by *z* factor
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** z factor
|
|
||||||
|
|
||||||
.. c:function:: void glm_translate_make(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
creates NEW translate transform matrix by *v* vector.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
|
||||||
|
|
||||||
scale existing transform matrix by *v* vector and store result in dest
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
|
||||||
| *[out]* **dest** scaled matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale_make(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
creates NEW scale matrix by v vector
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
scales existing transform matrix by v vector
|
|
||||||
and stores result in same matrix
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
|
||||||
|
|
||||||
applies uniform scale to existing transform matrix v = [s, s, s]
|
|
||||||
and stores result in same matrix
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale factor
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_x(mat4 m, float angle, mat4 dest)
|
|
||||||
|
|
||||||
rotate existing transform matrix around X axis by angle
|
|
||||||
and store result in dest
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[in]* **angle** angle (radians)
|
|
||||||
| *[out]* **dest** rotated matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_y(mat4 m, float angle, mat4 dest)
|
|
||||||
|
|
||||||
rotate existing transform matrix around Y axis by angle
|
|
||||||
and store result in dest
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[in]* **angle** angle (radians)
|
|
||||||
| *[out]* **dest** rotated matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_z(mat4 m, float angle, mat4 dest)
|
|
||||||
|
|
||||||
rotate existing 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
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
|
||||||
|
|
||||||
creates NEW rotation matrix by angle and axis,
|
|
||||||
axis will be normalized so you don't need to normalize it
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[out]* **m** affine transfrom
|
|
||||||
| *[in]* **axis** angle (radians)
|
|
||||||
| *[in]* **axis** axis
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate(mat4 m, float angle, vec3 axis)
|
|
||||||
|
|
||||||
rotate existing transform matrix around Z axis by angle and axis
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **angle** angle (radians)
|
|
||||||
| *[in]* **axis** axis
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis)
|
|
||||||
|
|
||||||
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
|
||||||
| *[in]* **angle** angle (radians)
|
|
||||||
| *[in]* **axis** axis
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis)
|
|
||||||
|
|
||||||
| creates NEW rotation matrix by angle and axis at given point
|
|
||||||
| this creates rotation matrix, it assumes you don't have a matrix
|
|
||||||
|
|
||||||
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
|
||||||
| *[in]* **angle** angle (radians)
|
|
||||||
| *[in]* **axis** axis
|
|
||||||
|
|
||||||
.. c:function:: void glm_decompose_scalev(mat4 m, vec3 s)
|
|
||||||
|
|
||||||
decompose scale vector
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transform
|
|
||||||
| *[out]* **s** scale vector (Sx, Sy, Sz)
|
|
||||||
|
|
||||||
.. c:function:: bool glm_uniscaled(mat4 m)
|
|
||||||
|
|
||||||
returns true if matrix is uniform scaled.
|
|
||||||
This is helpful for creating normal matrix.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_decompose_rs(mat4 m, mat4 r, vec3 s)
|
|
||||||
|
|
||||||
decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz]
|
|
||||||
DON'T pass projected matrix here
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transform
|
|
||||||
| *[out]* **r** rotation matrix
|
|
||||||
| *[out]* **s** scale matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s)
|
|
||||||
|
|
||||||
decompose affine transform, TODO: extract shear factors.
|
|
||||||
DON'T pass projected matrix here
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[out]* **t** translation vector
|
|
||||||
| *[out]* **r** rotation matrix (mat4)
|
|
||||||
| *[out]* **s** scaling vector [X, Y, Z]
|
|
||||||
|
|||||||
@@ -34,15 +34,18 @@ Follow the :doc:`build` documentation for this
|
|||||||
box
|
box
|
||||||
quat
|
quat
|
||||||
euler
|
euler
|
||||||
mat4
|
|
||||||
mat3
|
|
||||||
mat2
|
mat2
|
||||||
|
mat3
|
||||||
|
mat4
|
||||||
|
vec2
|
||||||
|
vec2-ext
|
||||||
vec3
|
vec3
|
||||||
vec3-ext
|
vec3-ext
|
||||||
vec4
|
vec4
|
||||||
vec4-ext
|
vec4-ext
|
||||||
vec2
|
ivec2
|
||||||
vec2-ext
|
ivec3
|
||||||
|
ivec4
|
||||||
color
|
color
|
||||||
plane
|
plane
|
||||||
project
|
project
|
||||||
|
|||||||
@@ -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.8.5'
|
version = u'0.8.7'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.8.5'
|
release = u'0.8.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.
|
||||||
|
|||||||
@@ -6,13 +6,12 @@
|
|||||||
cglm Documentation
|
cglm Documentation
|
||||||
================================
|
================================
|
||||||
|
|
||||||
**cglm** is optimized 3D math library written in C99 (compatible with C89).
|
**cglm** is an optimized 3D math library written in C99 (compatible with C89).
|
||||||
It is similar to original **glm** library except this is mainly for **C**
|
It is similar to the original **glm** library, except **cglm** is mainly for
|
||||||
|
**C**.
|
||||||
|
|
||||||
This library stores matrices as column-major order but in the future row-major
|
**cglm** stores matrices as column-major order but in the future row-major is
|
||||||
is considered to be supported as optional.
|
considered to be supported as optional.
|
||||||
|
|
||||||
Also currently only **float** type is supported for most operations.
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
@@ -46,8 +45,8 @@ Also currently only **float** type is supported for most operations.
|
|||||||
|
|
||||||
troubleshooting
|
troubleshooting
|
||||||
|
|
||||||
Indices and tables
|
Indices and Tables:
|
||||||
==================
|
===================
|
||||||
|
|
||||||
* :ref:`genindex`
|
* :ref:`genindex`
|
||||||
* :ref:`modindex`
|
* :ref:`modindex`
|
||||||
|
|||||||
163
docs/source/ivec2.rst
Normal file
163
docs/source/ivec2.rst
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
ivec2
|
||||||
|
=====
|
||||||
|
|
||||||
|
Header: cglm/ivec2.h
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_ivec2`
|
||||||
|
#. :c:func:`glm_ivec2_copy`
|
||||||
|
#. :c:func:`glm_ivec2_zero`
|
||||||
|
#. :c:func:`glm_ivec2_one`
|
||||||
|
#. :c:func:`glm_ivec2_add`
|
||||||
|
#. :c:func:`glm_ivec2_adds`
|
||||||
|
#. :c:func:`glm_ivec2_sub`
|
||||||
|
#. :c:func:`glm_ivec2_subs`
|
||||||
|
#. :c:func:`glm_ivec2_mul`
|
||||||
|
#. :c:func:`glm_ivec2_scale`
|
||||||
|
#. :c:func:`glm_ivec2_distance2`
|
||||||
|
#. :c:func:`glm_ivec2_distance`
|
||||||
|
#. :c:func:`glm_ivec2_maxv`
|
||||||
|
#. :c:func:`glm_ivec2_minv`
|
||||||
|
#. :c:func:`glm_ivec2_clamp`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2(int * v, ivec2 dest)
|
||||||
|
|
||||||
|
init ivec2 using vec3 or vec4
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_copy(ivec2 a, ivec2 dest)
|
||||||
|
|
||||||
|
copy all members of [a] to [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** source vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_zero(ivec2 v)
|
||||||
|
|
||||||
|
set all members of [v] to zero
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_one(ivec2 v)
|
||||||
|
|
||||||
|
set all members of [v] to one
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
add vector [a] to vector [b] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_adds(ivec2 v, int s, ivec2 dest)
|
||||||
|
|
||||||
|
add scalar s to vector [v] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
subtract vector [b] from vector [a] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_subs(ivec2 v, int s, ivec2 dest)
|
||||||
|
|
||||||
|
subtract scalar s from vector [v] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
multiply vector [a] with vector [b] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_scale(ivec2 v, int s, ivec2 dest)
|
||||||
|
|
||||||
|
multiply vector [a] with scalar s and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
||||||
|
|
||||||
|
squared distance between two vectors
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
squared distance (distance * distance)
|
||||||
|
|
||||||
|
.. c:function:: float glm_ivec2_distance(ivec2 a, ivec2 b)
|
||||||
|
|
||||||
|
distance between two vectors
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
distance
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
set each member of dest to greater of vector a and b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
set each member of dest to lesser of vector a and b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_clamp(ivec2 v, int minVal, int maxVal)
|
||||||
|
|
||||||
|
clamp each member of [v] between minVal and maxVal (inclusive)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **v** vector
|
||||||
|
| *[in]* **minVal** minimum value
|
||||||
|
| *[in]* **maxVal** maximum value
|
||||||
163
docs/source/ivec3.rst
Normal file
163
docs/source/ivec3.rst
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
ivec3
|
||||||
|
=====
|
||||||
|
|
||||||
|
Header: cglm/ivec3.h
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_ivec3`
|
||||||
|
#. :c:func:`glm_ivec3_copy`
|
||||||
|
#. :c:func:`glm_ivec3_zero`
|
||||||
|
#. :c:func:`glm_ivec3_one`
|
||||||
|
#. :c:func:`glm_ivec3_add`
|
||||||
|
#. :c:func:`glm_ivec3_adds`
|
||||||
|
#. :c:func:`glm_ivec3_sub`
|
||||||
|
#. :c:func:`glm_ivec3_subs`
|
||||||
|
#. :c:func:`glm_ivec3_mul`
|
||||||
|
#. :c:func:`glm_ivec3_scale`
|
||||||
|
#. :c:func:`glm_ivec3_distance2`
|
||||||
|
#. :c:func:`glm_ivec3_distance`
|
||||||
|
#. :c:func:`glm_ivec3_maxv`
|
||||||
|
#. :c:func:`glm_ivec3_minv`
|
||||||
|
#. :c:func:`glm_ivec3_clamp`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3(ivec4 v4, ivec3 dest)
|
||||||
|
|
||||||
|
init ivec3 using ivec4
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_copy(ivec3 a, ivec3 dest)
|
||||||
|
|
||||||
|
copy all members of [a] to [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** source vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_zero(ivec3 v)
|
||||||
|
|
||||||
|
set all members of [v] to zero
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_one(ivec3 v)
|
||||||
|
|
||||||
|
set all members of [v] to one
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
add vector [a] to vector [b] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_adds(ivec3 v, int s, ivec3 dest)
|
||||||
|
|
||||||
|
add scalar s to vector [v] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
subtract vector [b] from vector [a] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_subs(ivec3 v, int s, ivec3 dest)
|
||||||
|
|
||||||
|
subtract scalar s from vector [v] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
multiply vector [a] with vector [b] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_scale(ivec3 v, int s, ivec3 dest)
|
||||||
|
|
||||||
|
multiply vector [a] with scalar s and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
||||||
|
|
||||||
|
squared distance between two vectors
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
squared distance (distance * distance)
|
||||||
|
|
||||||
|
.. c:function:: float glm_ivec3_distance(ivec3 a, ivec3 b)
|
||||||
|
|
||||||
|
distance between two vectors
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
distance
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
set each member of dest to greater of vector a and b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
set each member of dest to lesser of vector a and b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_clamp(ivec3 v, int minVal, int maxVal)
|
||||||
|
|
||||||
|
clamp each member of [v] between minVal and maxVal (inclusive)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **v** vector
|
||||||
|
| *[in]* **minVal** minimum value
|
||||||
|
| *[in]* **maxVal** maximum value
|
||||||
163
docs/source/ivec4.rst
Normal file
163
docs/source/ivec4.rst
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
ivec4
|
||||||
|
=====
|
||||||
|
|
||||||
|
Header: cglm/ivec4.h
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_ivec4`
|
||||||
|
#. :c:func:`glm_ivec4_copy`
|
||||||
|
#. :c:func:`glm_ivec4_zero`
|
||||||
|
#. :c:func:`glm_ivec4_one`
|
||||||
|
#. :c:func:`glm_ivec4_add`
|
||||||
|
#. :c:func:`glm_ivec4_adds`
|
||||||
|
#. :c:func:`glm_ivec4_sub`
|
||||||
|
#. :c:func:`glm_ivec4_subs`
|
||||||
|
#. :c:func:`glm_ivec4_mul`
|
||||||
|
#. :c:func:`glm_ivec4_scale`
|
||||||
|
#. :c:func:`glm_ivec4_distance2`
|
||||||
|
#. :c:func:`glm_ivec4_distance`
|
||||||
|
#. :c:func:`glm_ivec4_maxv`
|
||||||
|
#. :c:func:`glm_ivec4_minv`
|
||||||
|
#. :c:func:`glm_ivec4_clamp`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4(ivec3 v3, int last, ivec4 dest)
|
||||||
|
|
||||||
|
init ivec4 using ivec3
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_copy(ivec4 a, ivec4 dest)
|
||||||
|
|
||||||
|
copy all members of [a] to [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** source vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_zero(ivec4 v)
|
||||||
|
|
||||||
|
set all members of [v] to zero
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_one(ivec4 v)
|
||||||
|
|
||||||
|
set all members of [v] to one
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_add(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
|
||||||
|
add vector [a] to vector [b] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_adds(ivec4 v, int s, ivec4 dest)
|
||||||
|
|
||||||
|
add scalar s to vector [v] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_sub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
|
||||||
|
subtract vector [b] from vector [a] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_subs(ivec4 v, int s, ivec4 dest)
|
||||||
|
|
||||||
|
subtract scalar s from vector [v] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
|
||||||
|
multiply vector [a] with vector [b] and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_scale(ivec4 v, int s, ivec4 dest)
|
||||||
|
|
||||||
|
multiply vector [a] with scalar s and store result in [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec4_distance2(ivec4 a, ivec4 b)
|
||||||
|
|
||||||
|
squared distance between two vectors
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
squared distance (distance * distance)
|
||||||
|
|
||||||
|
.. c:function:: float glm_ivec4_distance(ivec4 a, ivec4 b)
|
||||||
|
|
||||||
|
distance between two vectors
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
distance
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
|
||||||
|
set each member of dest to greater of vector a and b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_minv(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
|
||||||
|
set each member of dest to lesser of vector a and b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** first vector
|
||||||
|
| *[in]* **b** second vector
|
||||||
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_clamp(ivec4 v, int minVal, int maxVal)
|
||||||
|
|
||||||
|
clamp each member of [v] between minVal and maxVal (inclusive)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **v** vector
|
||||||
|
| *[in]* **minVal** minimum value
|
||||||
|
| *[in]* **maxVal** maximum value
|
||||||
@@ -21,14 +21,14 @@ Functions:
|
|||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. c:function:: void glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest)
|
.. c:function:: void glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest)
|
||||||
|
|
||||||
| maps the specified viewport coordinates into specified space [1]
|
| maps the specified viewport coordinates into specified space [1]
|
||||||
the matrix should contain projection matrix.
|
the matrix should contain projection matrix.
|
||||||
|
|
||||||
if you don't have ( and don't want to have ) an inverse matrix then use
|
if you don't have ( and don't want to have ) an inverse matrix then use
|
||||||
glm_unproject version. You may use existing inverse of matrix in somewhere
|
:c:func:`glm_unproject` version. You may use existing inverse of matrix in somewhere
|
||||||
else, this is why glm_unprojecti exists to save save inversion cost
|
else, this is why **glm_unprojecti** exists to save inversion cost
|
||||||
|
|
||||||
[1] space:
|
[1] space:
|
||||||
- if m = invProj: View Space
|
- if m = invProj: View Space
|
||||||
@@ -57,7 +57,7 @@ Functions documentation
|
|||||||
| maps the specified viewport coordinates into specified space [1]
|
| maps the specified viewport coordinates into specified space [1]
|
||||||
the matrix should contain projection matrix.
|
the matrix should contain projection matrix.
|
||||||
|
|
||||||
this is same as glm_unprojecti except this function get inverse matrix for
|
this is same as :c:func:`glm_unprojecti` except this function get inverse matrix for
|
||||||
you.
|
you.
|
||||||
|
|
||||||
[1] space:
|
[1] space:
|
||||||
@@ -80,7 +80,7 @@ Functions documentation
|
|||||||
| *[in]* **vp** viewport as [x, y, width, height]
|
| *[in]* **vp** viewport as [x, y, width, height]
|
||||||
| *[out]* **dest** unprojected coordinates
|
| *[out]* **dest** unprojected coordinates
|
||||||
|
|
||||||
.. c:function:: void glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest)
|
.. c:function:: void glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest)
|
||||||
|
|
||||||
| map object coordinates to window coordinates
|
| map object coordinates to window coordinates
|
||||||
|
|
||||||
@@ -91,12 +91,29 @@ Functions documentation
|
|||||||
glm_mat4_mul(proj, view, viewProj);
|
glm_mat4_mul(proj, view, viewProj);
|
||||||
glm_mat4_mul(viewProj, model, MVP);
|
glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
|
||||||
this could be useful for gettng a bbox which fits with view frustum and
|
|
||||||
object bounding boxes. In this case you crop view frustum box with objects
|
|
||||||
box
|
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **pos** object coordinates
|
| *[in]* **pos** object coordinates
|
||||||
| *[in]* **m** MVP matrix
|
| *[in]* **m** MVP matrix
|
||||||
| *[in]* **vp** viewport as [x, y, width, height]
|
| *[in]* **vp** viewport as [x, y, width, height]
|
||||||
| *[out]* **dest** projected coordinates
|
| *[out]* **dest** projected coordinates
|
||||||
|
|
||||||
|
.. c:function:: float glm_project_z(vec3 pos, mat4 m)
|
||||||
|
|
||||||
|
| map object's z coordinate to window coordinates
|
||||||
|
|
||||||
|
this is same as :c:func:`glm_project` except this function projects only Z coordinate
|
||||||
|
which reduces a few calculations and parameters.
|
||||||
|
|
||||||
|
Computing MVP:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
glm_mat4_mul(proj, view, viewProj);
|
||||||
|
glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **pos** object coordinates
|
||||||
|
| *[in]* **m** MVP matrix
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
projected z coordinate
|
||||||
247
include/cglm/affine-post.h
Normal file
247
include/cglm/affine-post.h
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_affine_post_h
|
||||||
|
#define cglm_affine_post_h
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_translated_to(mat4 m, vec3 v, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_translated(mat4 m, vec3 v);
|
||||||
|
CGLM_INLINE void glm_translated_x(mat4 m, float to);
|
||||||
|
CGLM_INLINE void glm_translated_y(mat4 m, float to);
|
||||||
|
CGLM_INLINE void glm_translated_z(mat4 m, float to);
|
||||||
|
CGLM_INLINE void glm_rotated_x(mat4 m, float angle, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_rotated_y(mat4 m, float angle, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_rotated_z(mat4 m, float angle, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_rotated(mat4 m, float angle, vec3 axis);
|
||||||
|
CGLM_INLINE void glm_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
CGLM_INLINE void glm_spinned(mat4 m, float angle, vec3 axis);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "vec3.h"
|
||||||
|
#include "vec4.h"
|
||||||
|
#include "mat4.h"
|
||||||
|
#include "affine-mat.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y, z]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translated(mat4 m, vec3 v) {
|
||||||
|
glm_vec3_add(m[3], v, m[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by v vector
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* source matrix will remain same
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y, z]
|
||||||
|
* @param[out] dest translated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translated_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
|
glm_mat4_copy(m, dest);
|
||||||
|
glm_translated(dest, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by x factor
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] x x factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translated_x(mat4 m, float x) {
|
||||||
|
m[3][0] += x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by y factor
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] y y factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translated_y(mat4 m, float y) {
|
||||||
|
m[3][1] += y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by z factor
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] z z factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translated_z(mat4 m, float z) {
|
||||||
|
m[3][2] += z;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[out] dest rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotated_x(mat4 m, float angle, mat4 dest) {
|
||||||
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
c = cosf(angle);
|
||||||
|
s = sinf(angle);
|
||||||
|
|
||||||
|
t[1][1] = c;
|
||||||
|
t[1][2] = s;
|
||||||
|
t[2][1] = -s;
|
||||||
|
t[2][2] = c;
|
||||||
|
|
||||||
|
glm_mul_rot(t, m, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[out] dest rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotated_y(mat4 m, float angle, mat4 dest) {
|
||||||
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
c = cosf(angle);
|
||||||
|
s = sinf(angle);
|
||||||
|
|
||||||
|
t[0][0] = c;
|
||||||
|
t[0][2] = -s;
|
||||||
|
t[2][0] = s;
|
||||||
|
t[2][2] = c;
|
||||||
|
|
||||||
|
glm_mul_rot(t, m, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[out] dest rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotated_z(mat4 m, float angle, mat4 dest) {
|
||||||
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
c = cosf(angle);
|
||||||
|
s = sinf(angle);
|
||||||
|
|
||||||
|
t[0][0] = c;
|
||||||
|
t[0][1] = s;
|
||||||
|
t[1][0] = -s;
|
||||||
|
t[1][1] = c;
|
||||||
|
|
||||||
|
glm_mul_rot(t, m, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotated(mat4 m, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN_MAT mat4 rot;
|
||||||
|
glm_rotate_make(rot, angle, axis);
|
||||||
|
glm_mul_rot(rot, m, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform
|
||||||
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] pivot rotation center
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
|
|
||||||
|
glm_translated(m, pivot);
|
||||||
|
glm_rotated(m, angle, axis);
|
||||||
|
glm_translated(m, pivotInv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
*
|
||||||
|
* this is POST transform, applies to existing transform as last transfrom
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_spinned(mat4 m, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN_MAT mat4 rot;
|
||||||
|
glm_rotate_atm(rot, m[3], angle, axis);
|
||||||
|
glm_mat4_mul(rot, m, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_affine_post_h */
|
||||||
285
include/cglm/affine-pre.h
Normal file
285
include/cglm/affine-pre.h
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_affine_pre_h
|
||||||
|
#define cglm_affine_pre_h
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_translate_to(mat4 m, vec3 v, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_translate(mat4 m, vec3 v);
|
||||||
|
CGLM_INLINE void glm_translate_x(mat4 m, float to);
|
||||||
|
CGLM_INLINE void glm_translate_y(mat4 m, float to);
|
||||||
|
CGLM_INLINE void glm_translate_z(mat4 m, float to);
|
||||||
|
CGLM_INLINE void glm_rotate_x(mat4 m, float angle, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_rotate_y(mat4 m, float angle, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_rotate_z(mat4 m, float angle, mat4 dest);
|
||||||
|
CGLM_INLINE void glm_rotate(mat4 m, float angle, vec3 axis);
|
||||||
|
CGLM_INLINE void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
CGLM_INLINE void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
CGLM_INLINE void glm_spin(mat4 m, float angle, vec3 axis);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "vec3.h"
|
||||||
|
#include "vec4.h"
|
||||||
|
#include "mat4.h"
|
||||||
|
#include "affine-mat.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y, z]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate(mat4 m, vec3 v) {
|
||||||
|
#if defined(CGLM_SIMD)
|
||||||
|
glmm_128 m0, m1, m2, m3;
|
||||||
|
|
||||||
|
m0 = glmm_load(m[0]);
|
||||||
|
m1 = glmm_load(m[1]);
|
||||||
|
m2 = glmm_load(m[2]);
|
||||||
|
m3 = glmm_load(m[3]);
|
||||||
|
|
||||||
|
glmm_store(m[3],
|
||||||
|
glmm_fmadd(m0, glmm_set1(v[0]),
|
||||||
|
glmm_fmadd(m1, glmm_set1(v[1]),
|
||||||
|
glmm_fmadd(m2, glmm_set1(v[2]), m3))));
|
||||||
|
#else
|
||||||
|
glm_vec4_muladds(m[0], v[0], m[3]);
|
||||||
|
glm_vec4_muladds(m[1], v[1], m[3]);
|
||||||
|
glm_vec4_muladds(m[2], v[2], m[3]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing 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, z]
|
||||||
|
* @param[out] dest translated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
|
glm_mat4_copy(m, dest);
|
||||||
|
glm_translate(dest, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by x factor
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] x x factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate_x(mat4 m, float x) {
|
||||||
|
#if defined(CGLM_SIMD)
|
||||||
|
glmm_store(m[3], glmm_fmadd(glmm_load(m[0]), glmm_set1(x), glmm_load(m[3])));
|
||||||
|
#else
|
||||||
|
vec4 v1;
|
||||||
|
glm_vec4_scale(m[0], x, v1);
|
||||||
|
glm_vec4_add(v1, m[3], m[3]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by y factor
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] y y factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate_y(mat4 m, float y) {
|
||||||
|
#if defined(CGLM_SIMD)
|
||||||
|
glmm_store(m[3], glmm_fmadd(glmm_load(m[1]), glmm_set1(y), glmm_load(m[3])));
|
||||||
|
#else
|
||||||
|
vec4 v1;
|
||||||
|
glm_vec4_scale(m[1], y, v1);
|
||||||
|
glm_vec4_add(v1, m[3], m[3]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by z factor
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] z z factor
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_translate_z(mat4 m, float z) {
|
||||||
|
#if defined(CGLM_SIMD)
|
||||||
|
glmm_store(m[3], glmm_fmadd(glmm_load(m[2]), glmm_set1(z), glmm_load(m[3])));
|
||||||
|
#else
|
||||||
|
vec4 v1;
|
||||||
|
glm_vec4_scale(m[2], z, v1);
|
||||||
|
glm_vec4_add(v1, m[3], m[3]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[out] dest rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate_x(mat4 m, float angle, mat4 dest) {
|
||||||
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
c = cosf(angle);
|
||||||
|
s = sinf(angle);
|
||||||
|
|
||||||
|
t[1][1] = c;
|
||||||
|
t[1][2] = s;
|
||||||
|
t[2][1] = -s;
|
||||||
|
t[2][2] = c;
|
||||||
|
|
||||||
|
glm_mul_rot(m, t, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[out] dest rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate_y(mat4 m, float angle, mat4 dest) {
|
||||||
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
c = cosf(angle);
|
||||||
|
s = sinf(angle);
|
||||||
|
|
||||||
|
t[0][0] = c;
|
||||||
|
t[0][2] = -s;
|
||||||
|
t[2][0] = s;
|
||||||
|
t[2][2] = c;
|
||||||
|
|
||||||
|
glm_mul_rot(m, t, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing 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 rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate_z(mat4 m, float angle, mat4 dest) {
|
||||||
|
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
||||||
|
float c, s;
|
||||||
|
|
||||||
|
c = cosf(angle);
|
||||||
|
s = sinf(angle);
|
||||||
|
|
||||||
|
t[0][0] = c;
|
||||||
|
t[0][1] = s;
|
||||||
|
t[1][0] = -s;
|
||||||
|
t[1][1] = c;
|
||||||
|
|
||||||
|
glm_mul_rot(m, t, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate(mat4 m, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN_MAT mat4 rot;
|
||||||
|
glm_rotate_make(rot, angle, axis);
|
||||||
|
glm_mul_rot(m, rot, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform
|
||||||
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] pivot rotation center
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
|
|
||||||
|
glm_translate(m, pivot);
|
||||||
|
glm_rotate(m, angle, axis);
|
||||||
|
glm_translate(m, pivotInv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW rotation matrix by angle and axis at given point
|
||||||
|
*
|
||||||
|
* this creates rotation matrix, it assumes you don't have a matrix
|
||||||
|
*
|
||||||
|
* this should work faster than glm_rotate_at because it reduces
|
||||||
|
* one glm_translate.
|
||||||
|
*
|
||||||
|
* @param[out] m affine transfrom
|
||||||
|
* @param[in] pivot rotation center
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN(8) vec3 pivotInv;
|
||||||
|
|
||||||
|
glm_vec3_negate_to(pivot, pivotInv);
|
||||||
|
|
||||||
|
glm_translate_make(m, pivot);
|
||||||
|
glm_rotate(m, angle, axis);
|
||||||
|
glm_translate(m, pivotInv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_spin(mat4 m, float angle, vec3 axis) {
|
||||||
|
CGLM_ALIGN_MAT mat4 rot;
|
||||||
|
glm_rotate_atm(rot, m[3], angle, axis);
|
||||||
|
glm_mat4_mul(m, rot, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_affine_pre_h */
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
CGLM_INLINE void glm_rotate(mat4 m, float angle, vec3 axis);
|
CGLM_INLINE void glm_rotate(mat4 m, float angle, vec3 axis);
|
||||||
CGLM_INLINE void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis);
|
CGLM_INLINE void glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
CGLM_INLINE void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis);
|
CGLM_INLINE void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
CGLM_INLINE void glm_spin(mat4 m, float angle, vec3 axis);
|
||||||
CGLM_INLINE void glm_decompose_scalev(mat4 m, vec3 s);
|
CGLM_INLINE void glm_decompose_scalev(mat4 m, vec3 s);
|
||||||
CGLM_INLINE bool glm_uniscaled(mat4 m);
|
CGLM_INLINE bool glm_uniscaled(mat4 m);
|
||||||
CGLM_INLINE void glm_decompose_rs(mat4 m, mat4 r, vec3 s);
|
CGLM_INLINE void glm_decompose_rs(mat4 m, mat4 r, vec3 s);
|
||||||
@@ -40,106 +41,6 @@
|
|||||||
#include "mat4.h"
|
#include "mat4.h"
|
||||||
#include "affine-mat.h"
|
#include "affine-mat.h"
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by v vector
|
|
||||||
* and stores result in same matrix
|
|
||||||
*
|
|
||||||
* @param[in, out] m affine transfrom
|
|
||||||
* @param[in] v translate vector [x, y, z]
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_translate(mat4 m, vec3 v) {
|
|
||||||
#if defined(CGLM_SIMD)
|
|
||||||
glmm_128 m0, m1, m2, m3;
|
|
||||||
|
|
||||||
m0 = glmm_load(m[0]);
|
|
||||||
m1 = glmm_load(m[1]);
|
|
||||||
m2 = glmm_load(m[2]);
|
|
||||||
m3 = glmm_load(m[3]);
|
|
||||||
|
|
||||||
glmm_store(m[3],
|
|
||||||
glmm_fmadd(m0, glmm_set1(v[0]),
|
|
||||||
glmm_fmadd(m1, glmm_set1(v[1]),
|
|
||||||
glmm_fmadd(m2, glmm_set1(v[2]), m3))));
|
|
||||||
#else
|
|
||||||
glm_vec4_muladds(m[0], v[0], m[3]);
|
|
||||||
glm_vec4_muladds(m[1], v[1], m[3]);
|
|
||||||
glm_vec4_muladds(m[2], v[2], m[3]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing 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, z]
|
|
||||||
* @param[out] dest translated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_translate_to(mat4 m, vec3 v, mat4 dest) {
|
|
||||||
glm_mat4_copy(m, dest);
|
|
||||||
glm_translate(dest, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by x factor
|
|
||||||
*
|
|
||||||
* @param[in, out] m affine transfrom
|
|
||||||
* @param[in] x x factor
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_translate_x(mat4 m, float x) {
|
|
||||||
#if defined(CGLM_SIMD)
|
|
||||||
glmm_store(m[3], glmm_fmadd(glmm_load(m[0]), glmm_set1(x), glmm_load(m[3])));
|
|
||||||
#else
|
|
||||||
vec4 v1;
|
|
||||||
glm_vec4_scale(m[0], x, v1);
|
|
||||||
glm_vec4_add(v1, m[3], m[3]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by y factor
|
|
||||||
*
|
|
||||||
* @param[in, out] m affine transfrom
|
|
||||||
* @param[in] y y factor
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_translate_y(mat4 m, float y) {
|
|
||||||
#if defined(CGLM_SIMD)
|
|
||||||
glmm_store(m[3], glmm_fmadd(glmm_load(m[1]), glmm_set1(y), glmm_load(m[3])));
|
|
||||||
#else
|
|
||||||
vec4 v1;
|
|
||||||
glm_vec4_scale(m[1], y, v1);
|
|
||||||
glm_vec4_add(v1, m[3], m[3]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by z factor
|
|
||||||
*
|
|
||||||
* @param[in, out] m affine transfrom
|
|
||||||
* @param[in] z z factor
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_translate_z(mat4 m, float z) {
|
|
||||||
#if defined(CGLM_SIMD)
|
|
||||||
glmm_store(m[3], glmm_fmadd(glmm_load(m[2]), glmm_set1(z), glmm_load(m[3])));
|
|
||||||
#else
|
|
||||||
vec4 v1;
|
|
||||||
glm_vec4_scale(m[2], z, v1);
|
|
||||||
glm_vec4_add(v1, m[3], m[3]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief creates NEW translate transform matrix by v vector
|
* @brief creates NEW translate transform matrix by v vector
|
||||||
*
|
*
|
||||||
@@ -213,81 +114,6 @@ glm_scale_uni(mat4 m, float s) {
|
|||||||
glm_scale_to(m, v, m);
|
glm_scale_to(m, v, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around X axis by angle
|
|
||||||
* and store result in dest
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[out] dest rotated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_rotate_x(mat4 m, float angle, mat4 dest) {
|
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
|
||||||
float c, s;
|
|
||||||
|
|
||||||
c = cosf(angle);
|
|
||||||
s = sinf(angle);
|
|
||||||
|
|
||||||
t[1][1] = c;
|
|
||||||
t[1][2] = s;
|
|
||||||
t[2][1] = -s;
|
|
||||||
t[2][2] = c;
|
|
||||||
|
|
||||||
glm_mul_rot(m, t, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around Y axis by angle
|
|
||||||
* and store result in dest
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[out] dest rotated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_rotate_y(mat4 m, float angle, mat4 dest) {
|
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
|
||||||
float c, s;
|
|
||||||
|
|
||||||
c = cosf(angle);
|
|
||||||
s = sinf(angle);
|
|
||||||
|
|
||||||
t[0][0] = c;
|
|
||||||
t[0][2] = -s;
|
|
||||||
t[2][0] = s;
|
|
||||||
t[2][2] = c;
|
|
||||||
|
|
||||||
glm_mul_rot(m, t, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing 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 rotated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_rotate_z(mat4 m, float angle, mat4 dest) {
|
|
||||||
CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT;
|
|
||||||
float c, s;
|
|
||||||
|
|
||||||
c = cosf(angle);
|
|
||||||
s = sinf(angle);
|
|
||||||
|
|
||||||
t[0][0] = c;
|
|
||||||
t[0][1] = s;
|
|
||||||
t[1][0] = -s;
|
|
||||||
t[1][1] = c;
|
|
||||||
|
|
||||||
glm_mul_rot(m, t, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief creates NEW rotation matrix by angle and axis
|
* @brief creates NEW rotation matrix by angle and axis
|
||||||
*
|
*
|
||||||
@@ -321,67 +147,6 @@ glm_rotate_make(mat4 m, float angle, vec3 axis) {
|
|||||||
m[3][3] = 1.0f;
|
m[3][3] = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around given axis by angle
|
|
||||||
*
|
|
||||||
* @param[in, out] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[in] axis axis
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_rotate(mat4 m, float angle, vec3 axis) {
|
|
||||||
CGLM_ALIGN_MAT mat4 rot;
|
|
||||||
glm_rotate_make(rot, angle, axis);
|
|
||||||
glm_mul_rot(m, rot, m);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform
|
|
||||||
* around given axis by angle at given pivot point (rotation center)
|
|
||||||
*
|
|
||||||
* @param[in, out] m affine transfrom
|
|
||||||
* @param[in] pivot rotation center
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[in] axis axis
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
|
||||||
CGLM_ALIGN(8) vec3 pivotInv;
|
|
||||||
|
|
||||||
glm_vec3_negate_to(pivot, pivotInv);
|
|
||||||
|
|
||||||
glm_translate(m, pivot);
|
|
||||||
glm_rotate(m, angle, axis);
|
|
||||||
glm_translate(m, pivotInv);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief creates NEW rotation matrix by angle and axis at given point
|
|
||||||
*
|
|
||||||
* this creates rotation matrix, it assumes you don't have a matrix
|
|
||||||
*
|
|
||||||
* this should work faster than glm_rotate_at because it reduces
|
|
||||||
* one glm_translate.
|
|
||||||
*
|
|
||||||
* @param[out] m affine transfrom
|
|
||||||
* @param[in] pivot rotation center
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[in] axis axis
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
|
||||||
CGLM_ALIGN(8) vec3 pivotInv;
|
|
||||||
|
|
||||||
glm_vec3_negate_to(pivot, pivotInv);
|
|
||||||
|
|
||||||
glm_translate_make(m, pivot);
|
|
||||||
glm_rotate(m, angle, axis);
|
|
||||||
glm_translate(m, pivotInv);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decompose scale vector
|
* @brief decompose scale vector
|
||||||
*
|
*
|
||||||
@@ -467,4 +232,7 @@ glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s) {
|
|||||||
glm_decompose_rs(m, r, s);
|
glm_decompose_rs(m, r, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "affine-pre.h"
|
||||||
|
#include "affine-post.h"
|
||||||
|
|
||||||
#endif /* cglm_affine_h */
|
#endif /* cglm_affine_h */
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ extern "C" {
|
|||||||
#include "call/vec2.h"
|
#include "call/vec2.h"
|
||||||
#include "call/vec3.h"
|
#include "call/vec3.h"
|
||||||
#include "call/vec4.h"
|
#include "call/vec4.h"
|
||||||
|
#include "call/ivec2.h"
|
||||||
|
#include "call/ivec3.h"
|
||||||
|
#include "call/ivec4.h"
|
||||||
#include "call/mat2.h"
|
#include "call/mat2.h"
|
||||||
#include "call/mat3.h"
|
#include "call/mat3.h"
|
||||||
#include "call/mat4.h"
|
#include "call/mat4.h"
|
||||||
|
|||||||
@@ -81,6 +81,10 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis);
|
glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_spin(mat4 m, float angle, vec3 axis);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose_scalev(mat4 m, vec3 s);
|
glmc_decompose_scalev(mat4 m, vec3 s);
|
||||||
@@ -97,6 +101,52 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s);
|
glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s);
|
||||||
|
|
||||||
|
/* affine-post */
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated(mat4 m, vec3 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_to(mat4 m, vec3 v, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_x(mat4 m, float x);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_y(mat4 m, float y);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_z(mat4 m, float z);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_x(mat4 m, float angle, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_y(mat4 m, float angle, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_z(mat4 m, float angle, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated(mat4 m, float angle, vec3 axis);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_spinned(mat4 m, float angle, vec3 axis);
|
||||||
|
|
||||||
/* affine-mat */
|
/* affine-mat */
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_project_no(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
glmc_project_no(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_project_z_no(vec3 pos, mat4 m);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_project_zo(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
glmc_project_zo(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_project_z_zo(vec3 pos, mat4 m);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
79
include/cglm/call/ivec2.h
Normal file
79
include/cglm/call/ivec2.h
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ivec2_h
|
||||||
|
#define cglmc_ivec2_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2(int * __restrict v, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_copy(ivec2 a, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_zero(ivec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_one(ivec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_add(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_adds(ivec2 v, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_subs(ivec2 v, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_scale(ivec2 v, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec2_distance2(ivec2 a, ivec2 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_ivec2_distance(ivec2 a, ivec2 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_clamp(ivec2 v, int minVal, int maxVal);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ivec2_h */
|
||||||
79
include/cglm/call/ivec3.h
Normal file
79
include/cglm/call/ivec3.h
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c);, Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT);, http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ivec3_h
|
||||||
|
#define cglmc_ivec3_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3(ivec4 v4, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_copy(ivec3 a, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_zero(ivec3 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_one(ivec3 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_add(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_adds(ivec3 v, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_subs(ivec3 v, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_scale(ivec3 v, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec3_distance2(ivec3 a, ivec3 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_ivec3_distance(ivec3 a, ivec3 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_clamp(ivec3 v, int minVal, int maxVal);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ivec3_h */
|
||||||
79
include/cglm/call/ivec4.h
Normal file
79
include/cglm/call/ivec4.h
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ivec4_h
|
||||||
|
#define cglmc_ivec4_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4(ivec3 v3, int last, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_copy(ivec4 a, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_zero(ivec4 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_one(ivec4 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_add(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_adds(ivec4 v, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_sub(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_subs(ivec4 v, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_scale(ivec4 v, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec4_distance2(ivec4 a, ivec4 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_ivec4_distance(ivec4 a, ivec4 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_minv(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_clamp(ivec4 v, int minVal, int maxVal);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ivec4_h */
|
||||||
@@ -25,6 +25,10 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_project_z(vec3 pos, mat4 m);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_pickmatrix(vec2 center, vec2 size, vec4 vp, mat4 dest);
|
glmc_pickmatrix(vec2 center, vec2 size, vec4 vp, mat4 dest);
|
||||||
|
|||||||
@@ -12,6 +12,9 @@
|
|||||||
#include "vec2.h"
|
#include "vec2.h"
|
||||||
#include "vec3.h"
|
#include "vec3.h"
|
||||||
#include "vec4.h"
|
#include "vec4.h"
|
||||||
|
#include "ivec2.h"
|
||||||
|
#include "ivec3.h"
|
||||||
|
#include "ivec4.h"
|
||||||
#include "mat4.h"
|
#include "mat4.h"
|
||||||
#include "mat3.h"
|
#include "mat3.h"
|
||||||
#include "mat2.h"
|
#include "mat2.h"
|
||||||
|
|||||||
@@ -83,4 +83,27 @@ glm_project_no(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
|||||||
dest[2] = pos4[2];
|
dest[2] = pos4[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object's z coordinate to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] v object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
*
|
||||||
|
* @returns projected z coordinate
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_project_z_no(vec3 v, mat4 m) {
|
||||||
|
float z, w;
|
||||||
|
|
||||||
|
z = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2];
|
||||||
|
w = m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3];
|
||||||
|
|
||||||
|
return 0.5f * (z / w) + 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* cglm_project_no_h */
|
#endif /* cglm_project_no_h */
|
||||||
|
|||||||
@@ -85,4 +85,27 @@ glm_project_zo(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
|||||||
dest[1] = pos4[1] * vp[3] + vp[1];
|
dest[1] = pos4[1] * vp[3] + vp[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object's z coordinate to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] v object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
*
|
||||||
|
* @returns projected z coordinate
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_project_z_zo(vec3 v, mat4 m) {
|
||||||
|
float z, w;
|
||||||
|
|
||||||
|
z = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2];
|
||||||
|
w = m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3];
|
||||||
|
|
||||||
|
return z / w;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* cglm_project_zo_h */
|
#endif /* cglm_project_zo_h */
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ glm_lookat_lh(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
|||||||
glm_vec3_sub(center, eye, f);
|
glm_vec3_sub(center, eye, f);
|
||||||
glm_vec3_normalize(f);
|
glm_vec3_normalize(f);
|
||||||
|
|
||||||
glm_vec3_crossn(f, up, s);
|
glm_vec3_crossn(up, f, s);
|
||||||
glm_vec3_cross(s, f, u);
|
glm_vec3_cross(f, s, u);
|
||||||
|
|
||||||
dest[0][0] = s[0];
|
dest[0][0] = s[0];
|
||||||
dest[0][1] = u[0];
|
dest[0][1] = u[0];
|
||||||
|
|||||||
@@ -51,9 +51,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clip control: define GLM_FORCE_DEPTH_ZERO_TO_ONE before including
|
* Clip control: define CGLM_FORCE_DEPTH_ZERO_TO_ONE before including
|
||||||
* CGLM to use a clip space between 0 to 1.
|
* CGLM to use a clip space between 0 to 1.
|
||||||
* Coordinate system: define GLM_FORCE_LEFT_HANDED before including
|
* Coordinate system: define CGLM_FORCE_LEFT_HANDED before including
|
||||||
* CGLM to use the left handed coordinate system by default.
|
* CGLM to use the left handed coordinate system by default.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
|| defined(CGLM_NO_PRINTS_NOOP)
|
|| defined(CGLM_NO_PRINTS_NOOP)
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
242
include/cglm/ivec2.h
Normal file
242
include/cglm/ivec2.h
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
/*
|
||||||
|
* 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_ivec2(int * __restrict v, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_copy(ivec2 a, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_zero(ivec2 v)
|
||||||
|
CGLM_INLINE void glm_ivec2_one(ivec2 v)
|
||||||
|
CGLM_INLINE void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_adds(ivec2 v, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_subs(ivec2 v, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_scale(ivec2 v, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
||||||
|
CGLM_INLINE float glm_ivec2_distance(ivec2 a, ivec2 b)
|
||||||
|
CGLM_INLINE void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_clamp(ivec2 v, int minVal, int maxVal)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ivec2_h
|
||||||
|
#define cglm_ivec2_h
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief init ivec2 using vec3 or vec4
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2(int * __restrict v, ivec2 dest) {
|
||||||
|
dest[0] = v[0];
|
||||||
|
dest[1] = v[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief copy all members of [a] to [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a source vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_copy(ivec2 a, ivec2 dest) {
|
||||||
|
dest[0] = a[0];
|
||||||
|
dest[1] = a[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set all members of [v] to zero
|
||||||
|
*
|
||||||
|
* @param[out] v vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_zero(ivec2 v) {
|
||||||
|
v[0] = v[1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set all members of [v] to one
|
||||||
|
*
|
||||||
|
* @param[out] v vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_one(ivec2 v) {
|
||||||
|
v[0] = v[1] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] + b[0];
|
||||||
|
dest[1] = a[1] + b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar s to vector [v] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_adds(ivec2 v, int s, ivec2 dest) {
|
||||||
|
dest[0] = v[0] + s;
|
||||||
|
dest[1] = v[1] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [b] from vector [a] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] - b[0];
|
||||||
|
dest[1] = a[1] - b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar s from vector [v] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_subs(ivec2 v, int s, ivec2 dest) {
|
||||||
|
dest[0] = v[0] - s;
|
||||||
|
dest[1] = v[1] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a frist vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] * b[0];
|
||||||
|
dest[1] = a[1] * b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar s and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_scale(ivec2 v, int s, ivec2 dest) {
|
||||||
|
dest[0] = v[0] * s;
|
||||||
|
dest[1] = v[1] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief squared distance between two vectors
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @return returns squared distance (distance * distance)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec2_distance2(ivec2 a, ivec2 b) {
|
||||||
|
int xd, yd;
|
||||||
|
xd = a[0] - b[0];
|
||||||
|
yd = a[1] - b[1];
|
||||||
|
return xd * xd + yd * yd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief distance between two vectors
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @return returns distance
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_ivec2_distance(ivec2 a, ivec2 b) {
|
||||||
|
return sqrtf((float)glm_ivec2_distance2(a, b));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set each member of dest to greater of vector a and b
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] > b[0] ? a[0] : b[0];
|
||||||
|
dest[1] = a[1] > b[1] ? a[1] : b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set each member of dest to lesser of vector a and b
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] < b[0] ? a[0] : b[0];
|
||||||
|
dest[1] = a[1] < b[1] ? a[1] : b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief clamp each member of [v] between minVal and maxVal (inclusive)
|
||||||
|
*
|
||||||
|
* @param[in, out] v vector
|
||||||
|
* @param[in] minVal minimum value
|
||||||
|
* @param[in] maxVal maximum value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_clamp(ivec2 v, int minVal, int maxVal) {
|
||||||
|
if (v[0] < minVal)
|
||||||
|
v[0] = minVal;
|
||||||
|
else if(v[0] > maxVal)
|
||||||
|
v[0] = maxVal;
|
||||||
|
|
||||||
|
if (v[1] < minVal)
|
||||||
|
v[1] = minVal;
|
||||||
|
else if(v[1] > maxVal)
|
||||||
|
v[1] = maxVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_ivec2_h */
|
||||||
258
include/cglm/ivec3.h
Normal file
258
include/cglm/ivec3.h
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
/*
|
||||||
|
* 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_ivec3(ivec4 v4, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_copy(ivec3 a, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_zero(ivec3 v)
|
||||||
|
CGLM_INLINE void glm_ivec3_one(ivec3 v)
|
||||||
|
CGLM_INLINE void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_adds(ivec3 v, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_subs(ivec3 v, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_scale(ivec3 v, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
||||||
|
CGLM_INLINE float glm_ivec3_distance(ivec3 a, ivec3 b)
|
||||||
|
CGLM_INLINE void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_clamp(ivec3 v, int minVal, int maxVal)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ivec3_h
|
||||||
|
#define cglm_ivec3_h
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief init ivec3 using ivec4
|
||||||
|
*
|
||||||
|
* @param[in] v4 vector4
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3(ivec4 v4, ivec3 dest) {
|
||||||
|
dest[0] = v4[0];
|
||||||
|
dest[1] = v4[1];
|
||||||
|
dest[2] = v4[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief copy all members of [a] to [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a source vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_copy(ivec3 a, ivec3 dest) {
|
||||||
|
dest[0] = a[0];
|
||||||
|
dest[1] = a[1];
|
||||||
|
dest[2] = a[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set all members of [v] to zero
|
||||||
|
*
|
||||||
|
* @param[out] v vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_zero(ivec3 v) {
|
||||||
|
v[0] = v[1] = v[2] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set all members of [v] to one
|
||||||
|
*
|
||||||
|
* @param[out] v vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_one(ivec3 v) {
|
||||||
|
v[0] = v[1] = v[2] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] + b[0];
|
||||||
|
dest[1] = a[1] + b[1];
|
||||||
|
dest[2] = a[2] + b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar s to vector [v] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_adds(ivec3 v, int s, ivec3 dest) {
|
||||||
|
dest[0] = v[0] + s;
|
||||||
|
dest[1] = v[1] + s;
|
||||||
|
dest[2] = v[2] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [b] from vector [a] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] - b[0];
|
||||||
|
dest[1] = a[1] - b[1];
|
||||||
|
dest[2] = a[2] - b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar s from vector [v] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_subs(ivec3 v, int s, ivec3 dest) {
|
||||||
|
dest[0] = v[0] - s;
|
||||||
|
dest[1] = v[1] - s;
|
||||||
|
dest[2] = v[2] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a frist vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] * b[0];
|
||||||
|
dest[1] = a[1] * b[1];
|
||||||
|
dest[2] = a[2] * b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar s and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_scale(ivec3 v, int s, ivec3 dest) {
|
||||||
|
dest[0] = v[0] * s;
|
||||||
|
dest[1] = v[1] * s;
|
||||||
|
dest[2] = v[2] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief squared distance between two vectors
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @return returns squared distance (distance * distance)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec3_distance2(ivec3 a, ivec3 b) {
|
||||||
|
int xd, yd, zd;
|
||||||
|
xd = a[0] - b[0];
|
||||||
|
yd = a[1] - b[1];
|
||||||
|
zd = a[2] - b[2];
|
||||||
|
return xd * xd + yd * yd + zd * zd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief distance between two vectors
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @return returns distance
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_ivec3_distance(ivec3 a, ivec3 b) {
|
||||||
|
return sqrtf((float)glm_ivec3_distance2(a, b));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set each member of dest to greater of vector a and b
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] > b[0] ? a[0] : b[0];
|
||||||
|
dest[1] = a[1] > b[1] ? a[1] : b[1];
|
||||||
|
dest[2] = a[2] > b[2] ? a[2] : b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set each member of dest to lesser of vector a and b
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] < b[0] ? a[0] : b[0];
|
||||||
|
dest[1] = a[1] < b[1] ? a[1] : b[1];
|
||||||
|
dest[2] = a[2] < b[2] ? a[2] : b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief clamp each member of [v] between minVal and maxVal (inclusive)
|
||||||
|
*
|
||||||
|
* @param[in, out] v vector
|
||||||
|
* @param[in] minVal minimum value
|
||||||
|
* @param[in] maxVal maximum value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_clamp(ivec3 v, int minVal, int maxVal) {
|
||||||
|
if (v[0] < minVal)
|
||||||
|
v[0] = minVal;
|
||||||
|
else if(v[0] > maxVal)
|
||||||
|
v[0] = maxVal;
|
||||||
|
|
||||||
|
if (v[1] < minVal)
|
||||||
|
v[1] = minVal;
|
||||||
|
else if(v[1] > maxVal)
|
||||||
|
v[1] = maxVal;
|
||||||
|
|
||||||
|
if (v[2] < minVal)
|
||||||
|
v[2] = minVal;
|
||||||
|
else if(v[2] > maxVal)
|
||||||
|
v[2] = maxVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_ivec3_h */
|
||||||
275
include/cglm/ivec4.h
Normal file
275
include/cglm/ivec4.h
Normal file
@@ -0,0 +1,275 @@
|
|||||||
|
/*
|
||||||
|
* 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_ivec4(ivec3 v3, int last, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_copy(ivec4 a, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_zero(ivec4 v)
|
||||||
|
CGLM_INLINE void glm_ivec4_one(ivec4 v)
|
||||||
|
CGLM_INLINE void glm_ivec4_add(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_adds(ivec4 v, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_sub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_subs(ivec4 v, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_scale(ivec4 v, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE int glm_ivec4_distance2(ivec4 a, ivec4 b)
|
||||||
|
CGLM_INLINE float glm_ivec4_distance(ivec4 a, ivec4 b)
|
||||||
|
CGLM_INLINE void glm_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_minv(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_clamp(ivec4 v, int minVal, int maxVal)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ivec4_h
|
||||||
|
#define cglm_ivec4_h
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief init ivec4 using ivec3
|
||||||
|
*
|
||||||
|
* @param[in] v3 vector3
|
||||||
|
* @param[in] last last item
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4(ivec3 v3, int last, ivec4 dest) {
|
||||||
|
dest[0] = v3[0];
|
||||||
|
dest[1] = v3[1];
|
||||||
|
dest[2] = v3[2];
|
||||||
|
dest[3] = last;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief copy all members of [a] to [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a source vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_copy(ivec4 a, ivec4 dest) {
|
||||||
|
dest[0] = a[0];
|
||||||
|
dest[1] = a[1];
|
||||||
|
dest[2] = a[2];
|
||||||
|
dest[3] = a[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set all members of [v] to zero
|
||||||
|
*
|
||||||
|
* @param[out] v vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_zero(ivec4 v) {
|
||||||
|
v[0] = v[1] = v[2] = v[3] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set all members of [v] to one
|
||||||
|
*
|
||||||
|
* @param[out] v vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_one(ivec4 v) {
|
||||||
|
v[0] = v[1] = v[2] = v[3] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_add(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] = a[0] + b[0];
|
||||||
|
dest[1] = a[1] + b[1];
|
||||||
|
dest[2] = a[2] + b[2];
|
||||||
|
dest[3] = a[3] + b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar s to vector [v] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_adds(ivec4 v, int s, ivec4 dest) {
|
||||||
|
dest[0] = v[0] + s;
|
||||||
|
dest[1] = v[1] + s;
|
||||||
|
dest[2] = v[2] + s;
|
||||||
|
dest[3] = v[3] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [b] from vector [a] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_sub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] = a[0] - b[0];
|
||||||
|
dest[1] = a[1] - b[1];
|
||||||
|
dest[2] = a[2] - b[2];
|
||||||
|
dest[3] = a[3] - b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar s from vector [v] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_subs(ivec4 v, int s, ivec4 dest) {
|
||||||
|
dest[0] = v[0] - s;
|
||||||
|
dest[1] = v[1] - s;
|
||||||
|
dest[2] = v[2] - s;
|
||||||
|
dest[3] = v[3] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] a frist vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] = a[0] * b[0];
|
||||||
|
dest[1] = a[1] * b[1];
|
||||||
|
dest[2] = a[2] * b[2];
|
||||||
|
dest[3] = a[3] * b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar s and store result in [dest]
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_scale(ivec4 v, int s, ivec4 dest) {
|
||||||
|
dest[0] = v[0] * s;
|
||||||
|
dest[1] = v[1] * s;
|
||||||
|
dest[2] = v[2] * s;
|
||||||
|
dest[3] = v[3] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief squared distance between two vectors
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @return returns squared distance (distance * distance)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec4_distance2(ivec4 a, ivec4 b) {
|
||||||
|
int xd, yd, zd, wd;
|
||||||
|
xd = a[0] - b[0];
|
||||||
|
yd = a[1] - b[1];
|
||||||
|
zd = a[2] - b[2];
|
||||||
|
wd = a[3] - b[3];
|
||||||
|
return xd * xd + yd * yd + zd * zd + wd * wd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief distance between two vectors
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @return returns distance
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_ivec4_distance(ivec4 a, ivec4 b) {
|
||||||
|
return sqrtf((float)glm_ivec4_distance2(a, b));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set each member of dest to greater of vector a and b
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] = a[0] > b[0] ? a[0] : b[0];
|
||||||
|
dest[1] = a[1] > b[1] ? a[1] : b[1];
|
||||||
|
dest[2] = a[2] > b[2] ? a[2] : b[2];
|
||||||
|
dest[3] = a[3] > b[3] ? a[3] : b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set each member of dest to lesser of vector a and b
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_minv(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] = a[0] < b[0] ? a[0] : b[0];
|
||||||
|
dest[1] = a[1] < b[1] ? a[1] : b[1];
|
||||||
|
dest[2] = a[2] < b[2] ? a[2] : b[2];
|
||||||
|
dest[3] = a[3] < b[3] ? a[3] : b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief clamp each member of [v] between minVal and maxVal (inclusive)
|
||||||
|
*
|
||||||
|
* @param[in, out] v vector
|
||||||
|
* @param[in] minVal minimum value
|
||||||
|
* @param[in] maxVal maximum value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_clamp(ivec4 v, int minVal, int maxVal) {
|
||||||
|
if (v[0] < minVal)
|
||||||
|
v[0] = minVal;
|
||||||
|
else if(v[0] > maxVal)
|
||||||
|
v[0] = maxVal;
|
||||||
|
|
||||||
|
if (v[1] < minVal)
|
||||||
|
v[1] = minVal;
|
||||||
|
else if(v[1] > maxVal)
|
||||||
|
v[1] = maxVal;
|
||||||
|
|
||||||
|
if (v[2] < minVal)
|
||||||
|
v[2] = minVal;
|
||||||
|
else if(v[2] > maxVal)
|
||||||
|
v[2] = maxVal;
|
||||||
|
|
||||||
|
if (v[3] < minVal)
|
||||||
|
v[3] = minVal;
|
||||||
|
else if(v[3] > maxVal)
|
||||||
|
v[3] = maxVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_ivec4_h */
|
||||||
@@ -114,6 +114,28 @@ glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object's z coordinate to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] v object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
*
|
||||||
|
* @returns projected z coordinate
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_project_z(vec3 v, mat4 m) {
|
||||||
|
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_ZO_BIT
|
||||||
|
return glm_project_z_zo(v, m);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_NO_BIT
|
||||||
|
return glm_project_z_no(v, m);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief define a picking region
|
* @brief define a picking region
|
||||||
*
|
*
|
||||||
@@ -124,7 +146,7 @@ glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_pickmatrix(vec3 center, vec2 size, vec4 vp, mat4 dest) {
|
glm_pickmatrix(vec2 center, vec2 size, vec4 vp, mat4 dest) {
|
||||||
mat4 res;
|
mat4 res;
|
||||||
vec3 v;
|
vec3 v;
|
||||||
|
|
||||||
|
|||||||
@@ -86,13 +86,12 @@ CGLM_INLINE
|
|||||||
void
|
void
|
||||||
glm_inv_tr_neon(mat4 mat) {
|
glm_inv_tr_neon(mat4 mat) {
|
||||||
float32x4x4_t vmat;
|
float32x4x4_t vmat;
|
||||||
glmm_128 r0, r1, r2, r3, x0;
|
glmm_128 r0, r1, r2, x0;
|
||||||
|
|
||||||
vmat = vld4q_f32(mat[0]);
|
vmat = vld4q_f32(mat[0]);
|
||||||
r0 = vmat.val[0];
|
r0 = vmat.val[0];
|
||||||
r1 = vmat.val[1];
|
r1 = vmat.val[1];
|
||||||
r2 = vmat.val[2];
|
r2 = vmat.val[2];
|
||||||
r3 = vmat.val[3];
|
|
||||||
|
|
||||||
x0 = glmm_fmadd(r0, glmm_splat_w(r0),
|
x0 = glmm_fmadd(r0, glmm_splat_w(r0),
|
||||||
glmm_fmadd(r1, glmm_splat_w(r1),
|
glmm_fmadd(r1, glmm_splat_w(r1),
|
||||||
|
|||||||
184
include/cglm/struct/affine-post.h
Normal file
184
include/cglm/struct/affine-post.h
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_translated(mat4s m, vec3s v);
|
||||||
|
CGLM_INLINE mat4s glms_translated_x(mat4s m, float x);
|
||||||
|
CGLM_INLINE mat4s glms_translated_y(mat4s m, float y);
|
||||||
|
CGLM_INLINE mat4s glms_translated_z(mat4s m, float z);
|
||||||
|
CGLM_INLINE mat4s glms_rotated_x(mat4s m, float angle);
|
||||||
|
CGLM_INLINE mat4s glms_rotated_y(mat4s m, float angle);
|
||||||
|
CGLM_INLINE mat4s glms_rotated_z(mat4s m, float angle);
|
||||||
|
CGLM_INLINE mat4s glms_rotated(mat4s m, float angle, vec3s axis);
|
||||||
|
CGLM_INLINE mat4s glms_rotated_at(mat4s m, vec3s pivot, float angle, vec3s axis);
|
||||||
|
CGLM_INLINE mat4s glms_spinned(mat4s m, float angle, vec3s axis);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_affines_post_h
|
||||||
|
#define cglms_affines_post_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../types-struct.h"
|
||||||
|
#include "../affine.h"
|
||||||
|
#include "vec3.h"
|
||||||
|
#include "vec4.h"
|
||||||
|
#include "mat4.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y, z]
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translated(mat4s m, vec3s v) {
|
||||||
|
glm_translated(m.raw, v.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by x factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] x x factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translated_x(mat4s m, float x) {
|
||||||
|
glm_translated_x(m.raw, x);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by y factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] y y factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translated_y(mat4s m, float y) {
|
||||||
|
glm_translated_y(m.raw, y);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by z factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] z z factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translated_z(mat4s m, float z) {
|
||||||
|
glm_translated_z(m.raw, z);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotated_x(mat4s m, float angle) {
|
||||||
|
mat4s r;
|
||||||
|
glm_rotated_x(m.raw, angle, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotated_y(mat4s m, float angle) {
|
||||||
|
mat4s r;
|
||||||
|
glm_rotated_y(m.raw, angle, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotated_z(mat4s m, float angle) {
|
||||||
|
mat4s r;
|
||||||
|
glm_rotated_z(m.raw, angle, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotated(mat4s m, float angle, vec3s axis) {
|
||||||
|
glm_rotated(m.raw, angle, axis.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform
|
||||||
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] pivot rotation center
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotated_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
||||||
|
glm_rotated_at(m.raw, pivot.raw, angle, axis.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_spinned(mat4s m, float angle, vec3s axis) {
|
||||||
|
glm_spinned(m.raw, angle, axis.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_affines_post_h */
|
||||||
184
include/cglm/struct/affine-pre.h
Normal file
184
include/cglm/struct/affine-pre.h
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_translate(mat4s m, vec3s v);
|
||||||
|
CGLM_INLINE mat4s glms_translate_x(mat4s m, float x);
|
||||||
|
CGLM_INLINE mat4s glms_translate_y(mat4s m, float y);
|
||||||
|
CGLM_INLINE mat4s glms_translate_z(mat4s m, float z);
|
||||||
|
CGLM_INLINE mat4s glms_rotate_x(mat4s m, float angle);
|
||||||
|
CGLM_INLINE mat4s glms_rotate_y(mat4s m, float angle);
|
||||||
|
CGLM_INLINE mat4s glms_rotate_z(mat4s m, float angle);
|
||||||
|
CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis);
|
||||||
|
CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis);
|
||||||
|
CGLM_INLINE mat4s glms_spin(mat4s m, float angle, vec3s axis);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_affines_pre_h
|
||||||
|
#define cglms_affines_pre_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../types-struct.h"
|
||||||
|
#include "../affine.h"
|
||||||
|
#include "vec3.h"
|
||||||
|
#include "vec4.h"
|
||||||
|
#include "mat4.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by v vector
|
||||||
|
* and stores result in same matrix
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] v translate vector [x, y, z]
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translate(mat4s m, vec3s v) {
|
||||||
|
glm_translate(m.raw, v.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by x factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] x x factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translate_x(mat4s m, float x) {
|
||||||
|
glm_translate_x(m.raw, x);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by y factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] y y factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translate_y(mat4s m, float y) {
|
||||||
|
glm_translate_y(m.raw, y);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief translate existing transform matrix by z factor
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] z z factor
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_translate_z(mat4s m, float z) {
|
||||||
|
glm_translate_z(m.raw, z);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotate_x(mat4s m, float angle) {
|
||||||
|
mat4s r;
|
||||||
|
glm_rotate_x(m.raw, angle, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotate_y(mat4s m, float angle) {
|
||||||
|
mat4s r;
|
||||||
|
glm_rotate_y(m.raw, angle, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
|
* and store result in dest
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @returns rotated matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotate_z(mat4s m, float angle) {
|
||||||
|
mat4s r;
|
||||||
|
glm_rotate_z(m.raw, angle, r.raw);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotate(mat4s m, float angle, vec3s axis) {
|
||||||
|
glm_rotate(m.raw, angle, axis.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform
|
||||||
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] pivot rotation center
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
||||||
|
glm_rotate_at(m.raw, pivot.raw, angle, axis.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
*
|
||||||
|
* @param[in] m affine transfrom
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] axis axis
|
||||||
|
* @returns affine transfrom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_spin(mat4s m, float angle, vec3s axis) {
|
||||||
|
glm_spin(m.raw, angle, axis.raw);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_affines_pre_h */
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis);
|
CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis);
|
||||||
CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis);
|
CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis);
|
||||||
CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis);
|
CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis);
|
||||||
|
CGLM_INLINE mat4s glms_spin(mat4s m, float angle, vec3s axis);
|
||||||
CGLM_INLINE vec3s glms_decompose_scalev(mat4s m);
|
CGLM_INLINE vec3s glms_decompose_scalev(mat4s m);
|
||||||
CGLM_INLINE bool glms_uniscaled(mat4s m);
|
CGLM_INLINE bool glms_uniscaled(mat4s m);
|
||||||
CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s);
|
CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s);
|
||||||
@@ -39,63 +40,6 @@
|
|||||||
#include "vec4.h"
|
#include "vec4.h"
|
||||||
#include "mat4.h"
|
#include "mat4.h"
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by v vector
|
|
||||||
* and stores result in same matrix
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] v translate vector [x, y, z]
|
|
||||||
* @returns affine transfrom
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_translate(mat4s m, vec3s v) {
|
|
||||||
glm_translate(m.raw, v.raw);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by x factor
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] x x factor
|
|
||||||
* @returns affine transfrom
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_translate_x(mat4s m, float x) {
|
|
||||||
glm_translate_x(m.raw, x);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by y factor
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] y y factor
|
|
||||||
* @returns affine transfrom
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_translate_y(mat4s m, float y) {
|
|
||||||
glm_translate_y(m.raw, y);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief translate existing transform matrix by z factor
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] z z factor
|
|
||||||
* @returns affine transfrom
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_translate_z(mat4s m, float z) {
|
|
||||||
glm_translate_z(m.raw, z);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief creates NEW translate transform matrix by v vector
|
* @brief creates NEW translate transform matrix by v vector
|
||||||
*
|
*
|
||||||
@@ -155,54 +99,6 @@ glms_scale_uni(mat4s m, float s) {
|
|||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around X axis by angle
|
|
||||||
* and store result in dest
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @returns rotated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_rotate_x(mat4s m, float angle) {
|
|
||||||
mat4s r;
|
|
||||||
glm_rotate_x(m.raw, angle, r.raw);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around Y axis by angle
|
|
||||||
* and store result in dest
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @returns rotated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_rotate_y(mat4s m, float angle) {
|
|
||||||
mat4s r;
|
|
||||||
glm_rotate_y(m.raw, angle, r.raw);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around Z axis by angle
|
|
||||||
* and store result in dest
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @returns rotated matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_rotate_z(mat4s m, float angle) {
|
|
||||||
mat4s r;
|
|
||||||
glm_rotate_z(m.raw, angle, r.raw);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief creates NEW rotation matrix by angle and axis
|
* @brief creates NEW rotation matrix by angle and axis
|
||||||
*
|
*
|
||||||
@@ -220,38 +116,6 @@ glms_rotate_make(float angle, vec3s axis) {
|
|||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform matrix around given axis by angle
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[in] axis axis
|
|
||||||
* @returns affine transfrom
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_rotate(mat4s m, float angle, vec3s axis) {
|
|
||||||
glm_rotate(m.raw, angle, axis.raw);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief rotate existing transform
|
|
||||||
* around given axis by angle at given pivot point (rotation center)
|
|
||||||
*
|
|
||||||
* @param[in] m affine transfrom
|
|
||||||
* @param[in] pivot rotation center
|
|
||||||
* @param[in] angle angle (radians)
|
|
||||||
* @param[in] axis axis
|
|
||||||
* @returns affine transfrom
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
mat4s
|
|
||||||
glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
|
||||||
glm_rotate_at(m.raw, pivot.raw, angle, axis.raw);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief creates NEW rotation matrix by angle and axis at given point
|
* @brief creates NEW rotation matrix by angle and axis at given point
|
||||||
*
|
*
|
||||||
@@ -330,4 +194,7 @@ glms_decompose(mat4s m, vec4s * __restrict t, mat4s * __restrict r, vec3s * __re
|
|||||||
glm_decompose(m.raw, t->raw, r->raw, s->raw);
|
glm_decompose(m.raw, t->raw, r->raw, s->raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "affine-pre.h"
|
||||||
|
#include "affine-post.h"
|
||||||
|
|
||||||
#endif /* cglms_affines_h */
|
#endif /* cglms_affines_h */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
96
include/cglm/struct/clipspace/project_no.h
Normal file
96
include/cglm/struct/clipspace/project_no.h
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE vec3s glms_unprojecti_no(vec3s pos, mat4s invMat, vec4s vp, vec3 dest)
|
||||||
|
CGLM_INLINE vec3s glms_project_no(vec3s pos, mat4s m, vec4s vp, vec3s dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_project_no_h
|
||||||
|
#define cglms_project_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief maps the specified viewport coordinates into specified space [1]
|
||||||
|
* the matrix should contain projection matrix.
|
||||||
|
*
|
||||||
|
* if you don't have ( and don't want to have ) an inverse matrix then use
|
||||||
|
* glm_unproject version. You may use existing inverse of matrix in somewhere
|
||||||
|
* else, this is why glm_unprojecti exists to save save inversion cost
|
||||||
|
*
|
||||||
|
* [1] space:
|
||||||
|
* 1- if m = invProj: View Space
|
||||||
|
* 2- if m = invViewProj: World Space
|
||||||
|
* 3- if m = invMVP: Object Space
|
||||||
|
*
|
||||||
|
* You probably want to map the coordinates into object space
|
||||||
|
* so use invMVP as m
|
||||||
|
*
|
||||||
|
* Computing viewProj:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
* glm_mat4_inv(viewProj, invMVP);
|
||||||
|
*
|
||||||
|
* @param[in] pos point/position in viewport coordinates
|
||||||
|
* @param[in] invMat matrix (see brief)
|
||||||
|
* @param[in] vp viewport as [x, y, width, height]
|
||||||
|
*
|
||||||
|
* @returns unprojected coordinates
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_unprojecti_no(vec3s pos, mat4s invMat, vec4s vp, vec3 dest) {
|
||||||
|
vec3s dest;
|
||||||
|
glm_unprojecti_no(pos.raw, invMat.raw, vp.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object coordinates to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] pos object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
* @param[in] vp viewport as [x, y, width, height]
|
||||||
|
*
|
||||||
|
* @returns projected coordinates
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_project_no(vec3s pos, mat4s m, vec4s vp, vec3s dest) {
|
||||||
|
vec3s dest;
|
||||||
|
glm_project_no(pos.raw, m.raw, vp.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object's z coordinate to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] v object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
*
|
||||||
|
* @returns projected z coordinate
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_project_z_no(vec3s v, mat4s m) {
|
||||||
|
return glm_project_z_no(v.raw, m.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_project_rh_no_h */
|
||||||
96
include/cglm/struct/clipspace/project_zo.h
Normal file
96
include/cglm/struct/clipspace/project_zo.h
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE vec3s glms_unprojecti_no(vec3s pos, mat4s invMat, vec4s vp, vec3 dest)
|
||||||
|
CGLM_INLINE vec3s glms_project_no(vec3s pos, mat4s m, vec4s vp, vec3s dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_project_zo_h
|
||||||
|
#define cglms_project_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief maps the specified viewport coordinates into specified space [1]
|
||||||
|
* the matrix should contain projection matrix.
|
||||||
|
*
|
||||||
|
* if you don't have ( and don't want to have ) an inverse matrix then use
|
||||||
|
* glm_unproject version. You may use existing inverse of matrix in somewhere
|
||||||
|
* else, this is why glm_unprojecti exists to save save inversion cost
|
||||||
|
*
|
||||||
|
* [1] space:
|
||||||
|
* 1- if m = invProj: View Space
|
||||||
|
* 2- if m = invViewProj: World Space
|
||||||
|
* 3- if m = invMVP: Object Space
|
||||||
|
*
|
||||||
|
* You probably want to map the coordinates into object space
|
||||||
|
* so use invMVP as m
|
||||||
|
*
|
||||||
|
* Computing viewProj:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
* glm_mat4_inv(viewProj, invMVP);
|
||||||
|
*
|
||||||
|
* @param[in] pos point/position in viewport coordinates
|
||||||
|
* @param[in] invMat matrix (see brief)
|
||||||
|
* @param[in] vp viewport as [x, y, width, height]
|
||||||
|
*
|
||||||
|
* @returns unprojected coordinates
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_unprojecti_zo(vec3s pos, mat4s invMat, vec4s vp, vec3 dest) {
|
||||||
|
vec3s dest;
|
||||||
|
glm_unprojecti_zo(pos.raw, invMat.raw, vp.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object coordinates to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] pos object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
* @param[in] vp viewport as [x, y, width, height]
|
||||||
|
*
|
||||||
|
* @returns projected coordinates
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_project_zo(vec3s pos, mat4s m, vec4s vp, vec3 dest) {
|
||||||
|
vec3s dest;
|
||||||
|
glm_project_zo(pos.raw, m.raw, vp.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief map object's z coordinate to window coordinates
|
||||||
|
*
|
||||||
|
* Computing MVP:
|
||||||
|
* glm_mat4_mul(proj, view, viewProj);
|
||||||
|
* glm_mat4_mul(viewProj, model, MVP);
|
||||||
|
*
|
||||||
|
* @param[in] v object coordinates
|
||||||
|
* @param[in] m MVP matrix
|
||||||
|
*
|
||||||
|
* @returns projected z coordinate
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_project_z_zo(vec3s v, mat4s m) {
|
||||||
|
return glm_project_z_zo(v.raw, m.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_project_zo_h */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c), Recep Aslantas.
|
* Copyright (c), Recep Aslantas.
|
||||||
*
|
*
|
||||||
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ glms_project(vec3s pos, mat4s m, vec4s vp) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_pickmatrix(vec3s center, vec2s size, vec4s vp) {
|
glms_pickmatrix(vec2s center, vec2s size, vec4s vp) {
|
||||||
mat4s res;
|
mat4s res;
|
||||||
glm_pickmatrix(center.raw, size.raw, vp.raw, res.raw);
|
glm_pickmatrix(center.raw, size.raw, vp.raw, res.raw);
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
#define CGLM_VERSION_MAJOR 0
|
#define CGLM_VERSION_MAJOR 0
|
||||||
#define CGLM_VERSION_MINOR 8
|
#define CGLM_VERSION_MINOR 8
|
||||||
#define CGLM_VERSION_PATCH 5
|
#define CGLM_VERSION_PATCH 7
|
||||||
|
|
||||||
#endif /* cglm_version_h */
|
#endif /* cglm_version_h */
|
||||||
|
|||||||
33
meson.build
33
meson.build
@@ -1,5 +1,5 @@
|
|||||||
project('cglm', 'c',
|
project('cglm', 'c',
|
||||||
version : '0.8.5',
|
version : '0.8.7',
|
||||||
license : 'mit',
|
license : 'mit',
|
||||||
default_options : [
|
default_options : [
|
||||||
'c_std=c11',
|
'c_std=c11',
|
||||||
@@ -28,27 +28,30 @@ endif
|
|||||||
cglm_inc = include_directories('include')
|
cglm_inc = include_directories('include')
|
||||||
|
|
||||||
cglm_src = files(
|
cglm_src = files(
|
||||||
'src/affine.c',
|
|
||||||
'src/affine2d.c',
|
|
||||||
'src/bezier.c',
|
|
||||||
'src/box.c',
|
|
||||||
'src/cam.c',
|
|
||||||
'src/curve.c',
|
|
||||||
'src/ease.c',
|
|
||||||
'src/euler.c',
|
'src/euler.c',
|
||||||
'src/frustum.c',
|
'src/affine.c',
|
||||||
'src/io.c',
|
'src/io.c',
|
||||||
|
'src/quat.c',
|
||||||
|
'src/cam.c',
|
||||||
|
'src/vec2.c',
|
||||||
|
'src/ivec2.c',
|
||||||
|
'src/vec3.c',
|
||||||
|
'src/ivec3.c',
|
||||||
|
'src/vec4.c',
|
||||||
|
'src/ivec4.c',
|
||||||
'src/mat2.c',
|
'src/mat2.c',
|
||||||
'src/mat3.c',
|
'src/mat3.c',
|
||||||
'src/mat4.c',
|
'src/mat4.c',
|
||||||
'src/plane.c',
|
'src/plane.c',
|
||||||
|
'src/frustum.c',
|
||||||
|
'src/box.c',
|
||||||
'src/project.c',
|
'src/project.c',
|
||||||
'src/quat.c',
|
|
||||||
'src/ray.c',
|
|
||||||
'src/sphere.c',
|
'src/sphere.c',
|
||||||
'src/vec2.c',
|
'src/ease.c',
|
||||||
'src/vec3.c',
|
'src/curve.c',
|
||||||
'src/vec4.c',
|
'src/bezier.c',
|
||||||
|
'src/ray.c',
|
||||||
|
'src/affine2d.c',
|
||||||
'src/clipspace/ortho_lh_no.c',
|
'src/clipspace/ortho_lh_no.c',
|
||||||
'src/clipspace/ortho_lh_zo.c',
|
'src/clipspace/ortho_lh_zo.c',
|
||||||
'src/clipspace/ortho_rh_no.c',
|
'src/clipspace/ortho_rh_no.c',
|
||||||
@@ -61,6 +64,8 @@ cglm_src = files(
|
|||||||
'src/clipspace/view_lh_zo.c',
|
'src/clipspace/view_lh_zo.c',
|
||||||
'src/clipspace/view_rh_no.c',
|
'src/clipspace/view_rh_no.c',
|
||||||
'src/clipspace/view_rh_zo.c',
|
'src/clipspace/view_rh_zo.c',
|
||||||
|
'src/clipspace/project_no.c',
|
||||||
|
'src/clipspace/project_zo.c'
|
||||||
)
|
)
|
||||||
|
|
||||||
cglm_lib = library('cglm',
|
cglm_lib = library('cglm',
|
||||||
|
|||||||
72
src/affine.c
72
src/affine.c
@@ -110,6 +110,12 @@ glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
|||||||
glm_rotate_atm(m, pivot, angle, axis);
|
glm_rotate_atm(m, pivot, angle, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_spin(mat4 m, float angle, vec3 axis) {
|
||||||
|
glm_spin(m, angle, axis);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose_scalev(mat4 m, vec3 s) {
|
glmc_decompose_scalev(mat4 m, vec3 s) {
|
||||||
@@ -128,6 +134,72 @@ glmc_decompose_rs(mat4 m, mat4 r, vec3 s) {
|
|||||||
glm_decompose_rs(m, r, s);
|
glm_decompose_rs(m, r, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated(mat4 m, vec3 v) {
|
||||||
|
glm_translated(m, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_to(mat4 m, vec3 v, mat4 dest) {
|
||||||
|
glm_translated_to(m, v, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_x(mat4 m, float x) {
|
||||||
|
glm_translated_x(m, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_y(mat4 m, float y) {
|
||||||
|
glm_translated_y(m, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_translated_z(mat4 m, float z) {
|
||||||
|
glm_translated_z(m, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_x(mat4 m, float angle, mat4 dest) {
|
||||||
|
glm_rotated_x(m, angle, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_y(mat4 m, float angle, mat4 dest) {
|
||||||
|
glm_rotated_y(m, angle, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_z(mat4 m, float angle, mat4 dest) {
|
||||||
|
glm_rotated_z(m, angle, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated(mat4 m, float angle, vec3 axis) {
|
||||||
|
glm_rotated(m, angle, axis);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||||
|
glm_rotated_at(m, pivot, angle, axis);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_spinned(mat4 m, float angle, vec3 axis) {
|
||||||
|
glm_spinned(m, angle, axis);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s) {
|
glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s) {
|
||||||
|
|||||||
@@ -19,3 +19,9 @@ void
|
|||||||
glmc_project_no(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
glmc_project_no(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
||||||
glm_project_no(pos, m, vp, dest);
|
glm_project_no(pos, m, vp, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_project_z_no(vec3 pos, mat4 m) {
|
||||||
|
return glm_project_z_no(pos, m);
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,3 +19,9 @@ void
|
|||||||
glmc_project_zo(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
glmc_project_zo(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
||||||
glm_project_zo(pos, m, vp, dest);
|
glm_project_zo(pos, m, vp, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_project_z_zo(vec3 pos, mat4 m) {
|
||||||
|
return glm_project_z_zo(pos, m);
|
||||||
|
}
|
||||||
|
|||||||
99
src/ivec2.c
Normal file
99
src/ivec2.c
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* 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_ivec2(int * __restrict v, ivec2 dest) {
|
||||||
|
glm_ivec2(v, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_copy(ivec2 a, ivec2 dest) {
|
||||||
|
glm_ivec2_copy(a, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_zero(ivec2 v) {
|
||||||
|
glm_ivec2_zero(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_one(ivec2 v) {
|
||||||
|
glm_ivec2_one(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_add(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
glm_ivec2_add(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_adds(ivec2 v, int s, ivec2 dest) {
|
||||||
|
glm_ivec2_adds(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
glm_ivec2_sub(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_subs(ivec2 v, int s, ivec2 dest) {
|
||||||
|
glm_ivec2_subs(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
glm_ivec2_mul(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_scale(ivec2 v, int s, ivec2 dest) {
|
||||||
|
glm_ivec2_scale(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec2_distance2(ivec2 a, ivec2 b) {
|
||||||
|
return glm_ivec2_distance2(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_ivec2_distance(ivec2 a, ivec2 b) {
|
||||||
|
return glm_ivec2_distance(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
glm_ivec2_maxv(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
glm_ivec2_minv(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_clamp(ivec2 v, int minVal, int maxVal) {
|
||||||
|
glm_ivec2_clamp(v, minVal, maxVal);
|
||||||
|
}
|
||||||
99
src/ivec3.c
Normal file
99
src/ivec3.c
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* 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_ivec3(ivec4 v4, ivec3 dest) {
|
||||||
|
glm_ivec3(v4, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_copy(ivec3 a, ivec3 dest) {
|
||||||
|
glm_ivec3_copy(a, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_zero(ivec3 v) {
|
||||||
|
glm_ivec3_zero(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_one(ivec3 v) {
|
||||||
|
glm_ivec3_one(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_add(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
glm_ivec3_add(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_adds(ivec3 v, int s, ivec3 dest) {
|
||||||
|
glm_ivec3_adds(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
glm_ivec3_sub(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_subs(ivec3 v, int s, ivec3 dest) {
|
||||||
|
glm_ivec3_subs(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
glm_ivec3_mul(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_scale(ivec3 v, int s, ivec3 dest) {
|
||||||
|
glm_ivec3_scale(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec3_distance2(ivec3 a, ivec3 b) {
|
||||||
|
return glm_ivec3_distance2(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_ivec3_distance(ivec3 a, ivec3 b) {
|
||||||
|
return glm_ivec3_distance(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
glm_ivec3_maxv(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
glm_ivec3_minv(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_clamp(ivec3 v, int minVal, int maxVal) {
|
||||||
|
glm_ivec3_clamp(v, minVal, maxVal);
|
||||||
|
}
|
||||||
99
src/ivec4.c
Normal file
99
src/ivec4.c
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* 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_ivec4(ivec3 v3, int last, ivec4 dest) {
|
||||||
|
glm_ivec4(v3, last, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_copy(ivec4 a, ivec4 dest) {
|
||||||
|
glm_ivec4_copy(a, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_zero(ivec4 v) {
|
||||||
|
glm_ivec4_zero(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_one(ivec4 v) {
|
||||||
|
glm_ivec4_one(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_add(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
glm_ivec4_add(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_adds(ivec4 v, int s, ivec4 dest) {
|
||||||
|
glm_ivec4_adds(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_sub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
glm_ivec4_sub(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_subs(ivec4 v, int s, ivec4 dest) {
|
||||||
|
glm_ivec4_subs(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
glm_ivec4_mul(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_scale(ivec4 v, int s, ivec4 dest) {
|
||||||
|
glm_ivec4_scale(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec4_distance2(ivec4 a, ivec4 b) {
|
||||||
|
return glm_ivec4_distance2(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_ivec4_distance(ivec4 a, ivec4 b) {
|
||||||
|
return glm_ivec4_distance(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
glm_ivec4_maxv(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_minv(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
glm_ivec4_minv(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_clamp(ivec4 v, int minVal, int maxVal) {
|
||||||
|
glm_ivec4_clamp(v, minVal, maxVal);
|
||||||
|
}
|
||||||
@@ -26,6 +26,12 @@ glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) {
|
|||||||
glm_project(pos, m, vp, dest);
|
glm_project(pos, m, vp, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_project_z(vec3 pos, mat4 m) {
|
||||||
|
return glm_project_z(pos, m);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_pickmatrix(vec2 center, vec2 size, vec4 vp, mat4 dest) {
|
glmc_pickmatrix(vec2 center, vec2 size, vec4 vp, mat4 dest) {
|
||||||
|
|||||||
189
test/src/test_ivec2.h
Normal file
189
test/src/test_ivec2.h
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
/*
|
||||||
|
* 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, ivec2) {
|
||||||
|
ivec4 v4 = {2, 3, 5, 7};
|
||||||
|
ivec3 v3 = {11, 13, 17};
|
||||||
|
ivec2 v2;
|
||||||
|
|
||||||
|
GLM(ivec2)(v4, v2);
|
||||||
|
ASSERT(v2[0] == 2)
|
||||||
|
ASSERT(v2[1] == 3)
|
||||||
|
|
||||||
|
GLM(ivec2)(v3, v2);
|
||||||
|
ASSERT(v2[0] == 11)
|
||||||
|
ASSERT(v2[1] == 13)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_copy) {
|
||||||
|
ivec2 src = {7, 5};
|
||||||
|
ivec2 dst = {99, 99};
|
||||||
|
|
||||||
|
GLM(ivec2_copy)(src, dst);
|
||||||
|
ASSERT(dst[0] == 7)
|
||||||
|
ASSERT(dst[1] == 5)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_zero) {
|
||||||
|
ivec2 v = {2, 3};
|
||||||
|
|
||||||
|
GLM(ivec2_zero)(v);
|
||||||
|
ASSERT(v[0] == 0)
|
||||||
|
ASSERT(v[1] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_one) {
|
||||||
|
ivec2 v = {-2, 9};
|
||||||
|
|
||||||
|
GLM(ivec2_one)(v);
|
||||||
|
ASSERT(v[0] == 1)
|
||||||
|
ASSERT(v[1] == 1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_add) {
|
||||||
|
ivec2 a = {14, 3};
|
||||||
|
ivec2 b = {-3, 2};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
|
||||||
|
GLM(ivec2_add)(a, b, v);
|
||||||
|
ASSERT(v[0] == 11)
|
||||||
|
ASSERT(v[1] == 5)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_adds) {
|
||||||
|
ivec2 a = {-3, 1};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
int s = 2;
|
||||||
|
|
||||||
|
GLM(ivec2_adds)(a, s, v);
|
||||||
|
ASSERT(v[0] == -1)
|
||||||
|
ASSERT(v[1] == 3)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_sub) {
|
||||||
|
ivec2 a = {-2, 9};
|
||||||
|
ivec2 b = {3, 2};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
|
||||||
|
GLM(ivec2_sub)(a, b, v);
|
||||||
|
ASSERT(v[0] == -5)
|
||||||
|
ASSERT(v[1] == 7)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_subs) {
|
||||||
|
ivec2 a = {5, -2};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
int s = -3;
|
||||||
|
|
||||||
|
GLM(ivec2_subs)(a, s, v);
|
||||||
|
ASSERT(v[0] == 8)
|
||||||
|
ASSERT(v[1] == 1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_mul) {
|
||||||
|
ivec2 a = {3, 4};
|
||||||
|
ivec2 b = {-2, 3};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
|
||||||
|
GLM(ivec2_mul)(a, b, v);
|
||||||
|
ASSERT(v[0] == -6)
|
||||||
|
ASSERT(v[1] == 12)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_scale) {
|
||||||
|
ivec2 a = {-9, 2};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
int s = -2;
|
||||||
|
|
||||||
|
GLM(ivec2_scale)(a, s, v);
|
||||||
|
ASSERT(v[0] == 18)
|
||||||
|
ASSERT(v[1] == -4)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_distance2) {
|
||||||
|
ivec2 a = {-1, 3};
|
||||||
|
ivec2 b = {5, 4};
|
||||||
|
int v;
|
||||||
|
|
||||||
|
v = GLM(ivec2_distance2)(a, b);
|
||||||
|
ASSERT(v == 37)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_distance) {
|
||||||
|
ivec2 a = {3, 2};
|
||||||
|
ivec2 b = {-2, 5};
|
||||||
|
float v;
|
||||||
|
|
||||||
|
v = GLM(ivec2_distance)(a, b);
|
||||||
|
ASSERT(test_eq(v, 5.8309518948f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_maxv) {
|
||||||
|
ivec2 a = {9, -20};
|
||||||
|
ivec2 b = {8, -1};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
|
||||||
|
GLM(ivec2_maxv)(a, b, v);
|
||||||
|
ASSERT(v[0] == 9)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_minv) {
|
||||||
|
ivec2 a = {16, 0};
|
||||||
|
ivec2 b = {-15, 10};
|
||||||
|
ivec2 v = {99, 99};
|
||||||
|
|
||||||
|
GLM(ivec2_minv)(a, b, v);
|
||||||
|
ASSERT(v[0] == -15)
|
||||||
|
ASSERT(v[1] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec2_clamp) {
|
||||||
|
ivec2 v = {3, -1};
|
||||||
|
|
||||||
|
GLM(ivec2_clamp)(v, -2, 4);
|
||||||
|
ASSERT(v[0] == 3)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
|
||||||
|
v[0] = -15;
|
||||||
|
v[1] = 4;
|
||||||
|
GLM(ivec2_clamp)(v, -9, 3);
|
||||||
|
ASSERT(v[0] == -9)
|
||||||
|
ASSERT(v[1] == 3)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
199
test/src/test_ivec3.h
Normal file
199
test/src/test_ivec3.h
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
/*
|
||||||
|
* 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, ivec3) {
|
||||||
|
ivec4 v4 = {2, 3, 5, 7};
|
||||||
|
ivec3 v3 = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3)(v4, v3);
|
||||||
|
ASSERT(v3[0] == 2)
|
||||||
|
ASSERT(v3[1] == 3)
|
||||||
|
ASSERT(v3[2] == 5)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_copy) {
|
||||||
|
ivec3 src = {7, 5, 2};
|
||||||
|
ivec3 dst = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3_copy)(src, dst);
|
||||||
|
ASSERT(dst[0] == 7)
|
||||||
|
ASSERT(dst[1] == 5)
|
||||||
|
ASSERT(dst[2] == 2)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_zero) {
|
||||||
|
ivec3 v = {2, 3, 5};
|
||||||
|
|
||||||
|
GLM(ivec3_zero)(v);
|
||||||
|
ASSERT(v[0] == 0)
|
||||||
|
ASSERT(v[1] == 0)
|
||||||
|
ASSERT(v[2] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_one) {
|
||||||
|
ivec3 v = {-2, 9, 12};
|
||||||
|
|
||||||
|
GLM(ivec3_one)(v);
|
||||||
|
ASSERT(v[0] == 1)
|
||||||
|
ASSERT(v[1] == 1)
|
||||||
|
ASSERT(v[2] == 1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_add) {
|
||||||
|
ivec3 a = {14, 3, 2};
|
||||||
|
ivec3 b = {-3, 2, 1};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3_add)(a, b, v);
|
||||||
|
ASSERT(v[0] == 11)
|
||||||
|
ASSERT(v[1] == 5)
|
||||||
|
ASSERT(v[2] == 3)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_adds) {
|
||||||
|
ivec3 a = {-3, 1, 4};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
int s = 2;
|
||||||
|
|
||||||
|
GLM(ivec3_adds)(a, s, v);
|
||||||
|
ASSERT(v[0] == -1)
|
||||||
|
ASSERT(v[1] == 3)
|
||||||
|
ASSERT(v[2] == 6)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_sub) {
|
||||||
|
ivec3 a = {-2, 9, 1};
|
||||||
|
ivec3 b = {3, 2, -1};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3_sub)(a, b, v);
|
||||||
|
ASSERT(v[0] == -5)
|
||||||
|
ASSERT(v[1] == 7)
|
||||||
|
ASSERT(v[2] == 2)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_subs) {
|
||||||
|
ivec3 a = {5, -2, 6};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
int s = -3;
|
||||||
|
|
||||||
|
GLM(ivec3_subs)(a, s, v);
|
||||||
|
ASSERT(v[0] == 8)
|
||||||
|
ASSERT(v[1] == 1)
|
||||||
|
ASSERT(v[2] == 9)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_mul) {
|
||||||
|
ivec3 a = {3, 4, 5};
|
||||||
|
ivec3 b = {-2, 3, 1};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3_mul)(a, b, v);
|
||||||
|
ASSERT(v[0] == -6)
|
||||||
|
ASSERT(v[1] == 12)
|
||||||
|
ASSERT(v[2] == 5)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_scale) {
|
||||||
|
ivec3 a = {-9, 2, 3};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
int s = -2;
|
||||||
|
|
||||||
|
GLM(ivec3_scale)(a, s, v);
|
||||||
|
ASSERT(v[0] == 18)
|
||||||
|
ASSERT(v[1] == -4)
|
||||||
|
ASSERT(v[2] == -6)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_distance2) {
|
||||||
|
ivec3 a = {-1, 3, 0};
|
||||||
|
ivec3 b = {5, 4, 2};
|
||||||
|
int v;
|
||||||
|
|
||||||
|
v = GLM(ivec3_distance2)(a, b);
|
||||||
|
ASSERT(v == 41)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_distance) {
|
||||||
|
ivec3 a = {3, 2, 4};
|
||||||
|
ivec3 b = {-2, 5, 2};
|
||||||
|
float v;
|
||||||
|
|
||||||
|
v = GLM(ivec3_distance)(a, b);
|
||||||
|
ASSERT(test_eq(v, 6.1644140029f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_maxv) {
|
||||||
|
ivec3 a = {9, -20, 5};
|
||||||
|
ivec3 b = {8, -1, 2};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3_maxv)(a, b, v);
|
||||||
|
ASSERT(v[0] == 9)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
ASSERT(v[2] == 5)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_minv) {
|
||||||
|
ivec3 a = {16, 0, 4};
|
||||||
|
ivec3 b = {-15, 10, 8};
|
||||||
|
ivec3 v = {99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec3_minv)(a, b, v);
|
||||||
|
ASSERT(v[0] == -15)
|
||||||
|
ASSERT(v[1] == 0)
|
||||||
|
ASSERT(v[2] == 4)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec3_clamp) {
|
||||||
|
ivec3 v = {3, -1, 10};
|
||||||
|
|
||||||
|
GLM(ivec3_clamp)(v, -2, 4);
|
||||||
|
ASSERT(v[0] == 3)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
ASSERT(v[2] == 4)
|
||||||
|
|
||||||
|
v[0] = -15;
|
||||||
|
v[1] = 4;
|
||||||
|
v[2] = 1;
|
||||||
|
GLM(ivec3_clamp)(v, -9, 3);
|
||||||
|
ASSERT(v[0] == -9)
|
||||||
|
ASSERT(v[1] == 3)
|
||||||
|
ASSERT(v[2] == 1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
214
test/src/test_ivec4.h
Normal file
214
test/src/test_ivec4.h
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
* 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, ivec4) {
|
||||||
|
ivec3 v3 = {2, 3, 5};
|
||||||
|
ivec4 v4;
|
||||||
|
|
||||||
|
GLM(ivec4)(v3, 7, v4);
|
||||||
|
ASSERT(v4[0] == 2)
|
||||||
|
ASSERT(v4[1] == 3)
|
||||||
|
ASSERT(v4[2] == 5)
|
||||||
|
ASSERT(v4[3] == 7)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_copy) {
|
||||||
|
ivec4 src = {7, 5, 2, 11};
|
||||||
|
ivec4 dst = {99, 99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec4_copy)(src, dst);
|
||||||
|
ASSERT(dst[0] == 7)
|
||||||
|
ASSERT(dst[1] == 5)
|
||||||
|
ASSERT(dst[2] == 2)
|
||||||
|
ASSERT(dst[3] == 11)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_zero) {
|
||||||
|
ivec4 v = {2, 3, 5, 7};
|
||||||
|
|
||||||
|
GLM(ivec4_zero)(v);
|
||||||
|
ASSERT(v[0] == 0)
|
||||||
|
ASSERT(v[1] == 0)
|
||||||
|
ASSERT(v[2] == 0)
|
||||||
|
ASSERT(v[3] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_one) {
|
||||||
|
ivec4 v = {-2, 9, 12, 7};
|
||||||
|
|
||||||
|
GLM(ivec4_one)(v);
|
||||||
|
ASSERT(v[0] == 1)
|
||||||
|
ASSERT(v[1] == 1)
|
||||||
|
ASSERT(v[2] == 1)
|
||||||
|
ASSERT(v[3] == 1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_add) {
|
||||||
|
ivec4 a = {14, 3, 2, -4};
|
||||||
|
ivec4 b = {-3, 2, 1, -1};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec4_add)(a, b, v);
|
||||||
|
ASSERT(v[0] == 11)
|
||||||
|
ASSERT(v[1] == 5)
|
||||||
|
ASSERT(v[2] == 3)
|
||||||
|
ASSERT(v[3] == -5)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_adds) {
|
||||||
|
ivec4 a = {-3, 1, 4, 2};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
int s = -2;
|
||||||
|
|
||||||
|
GLM(ivec4_adds)(a, s, v);
|
||||||
|
ASSERT(v[0] == -5)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
ASSERT(v[2] == 2)
|
||||||
|
ASSERT(v[3] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_sub) {
|
||||||
|
ivec4 a = {-2, 9, 1, 5};
|
||||||
|
ivec4 b = {3, 2, -1, 2};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec4_sub)(a, b, v);
|
||||||
|
ASSERT(v[0] == -5)
|
||||||
|
ASSERT(v[1] == 7)
|
||||||
|
ASSERT(v[2] == 2)
|
||||||
|
ASSERT(v[3] == 3)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_subs) {
|
||||||
|
ivec4 a = {5, -2, 6, 1};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
int s = 2;
|
||||||
|
|
||||||
|
GLM(ivec4_subs)(a, s, v);
|
||||||
|
ASSERT(v[0] == 3)
|
||||||
|
ASSERT(v[1] == -4)
|
||||||
|
ASSERT(v[2] == 4)
|
||||||
|
ASSERT(v[3] == -1)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_mul) {
|
||||||
|
ivec4 a = {3, 4, 5, -3};
|
||||||
|
ivec4 b = {-2, 3, 1, 2};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec4_mul)(a, b, v);
|
||||||
|
ASSERT(v[0] == -6)
|
||||||
|
ASSERT(v[1] == 12)
|
||||||
|
ASSERT(v[2] == 5)
|
||||||
|
ASSERT(v[3] == -6)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_scale) {
|
||||||
|
ivec4 a = {-9, 2, 3, 0};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
int s = -2;
|
||||||
|
|
||||||
|
GLM(ivec4_scale)(a, s, v);
|
||||||
|
ASSERT(v[0] == 18)
|
||||||
|
ASSERT(v[1] == -4)
|
||||||
|
ASSERT(v[2] == -6)
|
||||||
|
ASSERT(v[3] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_distance2) {
|
||||||
|
ivec4 a = {-1, 3, 0, 4};
|
||||||
|
ivec4 b = {5, 4, 2, 6};
|
||||||
|
int v;
|
||||||
|
|
||||||
|
v = GLM(ivec4_distance2)(a, b);
|
||||||
|
ASSERT(v == 45)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_distance) {
|
||||||
|
ivec4 a = {3, 2, 4, -1};
|
||||||
|
ivec4 b = {-2, 5, 2, 4};
|
||||||
|
float v;
|
||||||
|
|
||||||
|
v = GLM(ivec4_distance)(a, b);
|
||||||
|
ASSERT(test_eq(v, 7.9372539331f))
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_maxv) {
|
||||||
|
ivec4 a = {9, -20, 5, -3};
|
||||||
|
ivec4 b = {8, -1, 2, 2};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec4_maxv)(a, b, v);
|
||||||
|
ASSERT(v[0] == 9)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
ASSERT(v[2] == 5)
|
||||||
|
ASSERT(v[3] == 2)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_minv) {
|
||||||
|
ivec4 a = {16, 0, 4, 5};
|
||||||
|
ivec4 b = {-15, 10, 8, 2};
|
||||||
|
ivec4 v = {99, 99, 99, 99};
|
||||||
|
|
||||||
|
GLM(ivec4_minv)(a, b, v);
|
||||||
|
ASSERT(v[0] == -15)
|
||||||
|
ASSERT(v[1] == 0)
|
||||||
|
ASSERT(v[2] == 4)
|
||||||
|
ASSERT(v[3] == 2)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_IMPL(GLM_PREFIX, ivec4_clamp) {
|
||||||
|
ivec4 v = {3, -1, 10, -100};
|
||||||
|
|
||||||
|
GLM(ivec4_clamp)(v, -2, 4);
|
||||||
|
ASSERT(v[0] == 3)
|
||||||
|
ASSERT(v[1] == -1)
|
||||||
|
ASSERT(v[2] == 4)
|
||||||
|
ASSERT(v[3] == -2)
|
||||||
|
|
||||||
|
v[0] = -15;
|
||||||
|
v[1] = 4;
|
||||||
|
v[2] = 1;
|
||||||
|
v[3] = 0;
|
||||||
|
GLM(ivec4_clamp)(v, -9, 3);
|
||||||
|
ASSERT(v[0] == -9)
|
||||||
|
ASSERT(v[1] == 3)
|
||||||
|
ASSERT(v[2] == 1)
|
||||||
|
ASSERT(v[3] == 0)
|
||||||
|
|
||||||
|
TEST_SUCCESS
|
||||||
|
}
|
||||||
@@ -598,7 +598,7 @@ TEST_IMPL(GLM_PREFIX, vec2_lerp) {
|
|||||||
TEST_IMPL(GLM_PREFIX, vec2_complex_mul) {
|
TEST_IMPL(GLM_PREFIX, vec2_complex_mul) {
|
||||||
vec2 v1 = { 3.0f, 5.0f },
|
vec2 v1 = { 3.0f, 5.0f },
|
||||||
v2 = { 7.0f, 11.0f },
|
v2 = { 7.0f, 11.0f },
|
||||||
v3 = { cosf(M_PI/4.0f), sinf(M_PI/4.0f) };
|
v3 = { cosf(GLM_PIf/4.0f), sinf(GLM_PIf/4.0f) };
|
||||||
|
|
||||||
GLM(vec2_complex_mul)(v1, v2, v2);
|
GLM(vec2_complex_mul)(v1, v2, v2);
|
||||||
ASSERTIFY(test_assert_vec2_eq(v2, (vec2){ -34, 68 }))
|
ASSERTIFY(test_assert_vec2_eq(v2, (vec2){ -34, 68 }))
|
||||||
@@ -612,8 +612,8 @@ TEST_IMPL(GLM_PREFIX, vec2_complex_mul) {
|
|||||||
TEST_IMPL(GLM_PREFIX, vec2_complex_div) {
|
TEST_IMPL(GLM_PREFIX, vec2_complex_div) {
|
||||||
vec2 v1 = { -34.0f, 68.0f },
|
vec2 v1 = { -34.0f, 68.0f },
|
||||||
v2 = { 3.0f, 5.0f },
|
v2 = { 3.0f, 5.0f },
|
||||||
v3 = { cosf(M_PI/4.0f), sinf(M_PI/4.0f) },
|
v3 = { cosf(GLM_PIf/4.0f), sinf(GLM_PIf/4.0f) },
|
||||||
v4 = { cosf(M_PI/4.0f), -sinf(M_PI/4.0f) };
|
v4 = { cosf(GLM_PIf/4.0f), -sinf(GLM_PIf/4.0f) };
|
||||||
|
|
||||||
GLM(vec2_complex_div)(v1, v2, v2);
|
GLM(vec2_complex_div)(v1, v2, v2);
|
||||||
ASSERTIFY(test_assert_vec2_eq(v2, (vec2){ 7.0f, 11.0f }))
|
ASSERTIFY(test_assert_vec2_eq(v2, (vec2){ 7.0f, 11.0f }))
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
#include "test_vec2.h"
|
#include "test_vec2.h"
|
||||||
#include "test_vec3.h"
|
#include "test_vec3.h"
|
||||||
#include "test_vec4.h"
|
#include "test_vec4.h"
|
||||||
|
#include "test_ivec2.h"
|
||||||
|
#include "test_ivec3.h"
|
||||||
|
#include "test_ivec4.h"
|
||||||
#include "test_mat2.h"
|
#include "test_mat2.h"
|
||||||
#include "test_mat3.h"
|
#include "test_mat3.h"
|
||||||
#include "test_mat4.h"
|
#include "test_mat4.h"
|
||||||
@@ -39,6 +42,9 @@
|
|||||||
#include "test_vec2.h"
|
#include "test_vec2.h"
|
||||||
#include "test_vec3.h"
|
#include "test_vec3.h"
|
||||||
#include "test_vec4.h"
|
#include "test_vec4.h"
|
||||||
|
#include "test_ivec2.h"
|
||||||
|
#include "test_ivec3.h"
|
||||||
|
#include "test_ivec4.h"
|
||||||
#include "test_mat2.h"
|
#include "test_mat2.h"
|
||||||
#include "test_mat3.h"
|
#include "test_mat3.h"
|
||||||
#include "test_mat4.h"
|
#include "test_mat4.h"
|
||||||
|
|||||||
211
test/tests.h
211
test/tests.h
@@ -340,9 +340,7 @@ TEST_DECLARE(glmc_quat_from_vecs)
|
|||||||
/* bezier */
|
/* bezier */
|
||||||
TEST_DECLARE(bezier)
|
TEST_DECLARE(bezier)
|
||||||
|
|
||||||
|
/* vec2 */
|
||||||
/* Macros */
|
|
||||||
|
|
||||||
TEST_DECLARE(MACRO_GLM_VEC2_ONE_INIT)
|
TEST_DECLARE(MACRO_GLM_VEC2_ONE_INIT)
|
||||||
TEST_DECLARE(MACRO_GLM_VEC2_ZERO_INIT)
|
TEST_DECLARE(MACRO_GLM_VEC2_ZERO_INIT)
|
||||||
TEST_DECLARE(MACRO_GLM_VEC2_ONE)
|
TEST_DECLARE(MACRO_GLM_VEC2_ONE)
|
||||||
@@ -385,7 +383,6 @@ TEST_DECLARE(glm_vec2_lerp)
|
|||||||
TEST_DECLARE(glm_vec2_complex_mul)
|
TEST_DECLARE(glm_vec2_complex_mul)
|
||||||
TEST_DECLARE(glm_vec2_complex_div)
|
TEST_DECLARE(glm_vec2_complex_div)
|
||||||
|
|
||||||
|
|
||||||
TEST_DECLARE(glmc_vec2)
|
TEST_DECLARE(glmc_vec2)
|
||||||
TEST_DECLARE(glmc_vec2_copy)
|
TEST_DECLARE(glmc_vec2_copy)
|
||||||
TEST_DECLARE(glmc_vec2_zero)
|
TEST_DECLARE(glmc_vec2_zero)
|
||||||
@@ -588,7 +585,6 @@ TEST_DECLARE(glmc_vec3_hadd)
|
|||||||
TEST_DECLARE(glmc_vec3_sqrt)
|
TEST_DECLARE(glmc_vec3_sqrt)
|
||||||
|
|
||||||
/* vec4 */
|
/* vec4 */
|
||||||
|
|
||||||
TEST_DECLARE(MACRO_GLM_VEC4_ONE_INIT)
|
TEST_DECLARE(MACRO_GLM_VEC4_ONE_INIT)
|
||||||
TEST_DECLARE(MACRO_GLM_VEC4_ZERO_INIT)
|
TEST_DECLARE(MACRO_GLM_VEC4_ZERO_INIT)
|
||||||
TEST_DECLARE(MACRO_GLM_VEC4_ONE)
|
TEST_DECLARE(MACRO_GLM_VEC4_ONE)
|
||||||
@@ -734,8 +730,106 @@ TEST_DECLARE(glmc_vec4_fract)
|
|||||||
TEST_DECLARE(glmc_vec4_hadd)
|
TEST_DECLARE(glmc_vec4_hadd)
|
||||||
TEST_DECLARE(glmc_vec4_sqrt)
|
TEST_DECLARE(glmc_vec4_sqrt)
|
||||||
|
|
||||||
/* structs */
|
/* ivec2 */
|
||||||
|
TEST_DECLARE(glm_ivec2)
|
||||||
|
TEST_DECLARE(glm_ivec2_copy)
|
||||||
|
TEST_DECLARE(glm_ivec2_zero)
|
||||||
|
TEST_DECLARE(glm_ivec2_one)
|
||||||
|
TEST_DECLARE(glm_ivec2_add)
|
||||||
|
TEST_DECLARE(glm_ivec2_adds)
|
||||||
|
TEST_DECLARE(glm_ivec2_sub)
|
||||||
|
TEST_DECLARE(glm_ivec2_subs)
|
||||||
|
TEST_DECLARE(glm_ivec2_mul)
|
||||||
|
TEST_DECLARE(glm_ivec2_scale)
|
||||||
|
TEST_DECLARE(glm_ivec2_distance2)
|
||||||
|
TEST_DECLARE(glm_ivec2_distance)
|
||||||
|
TEST_DECLARE(glm_ivec2_maxv)
|
||||||
|
TEST_DECLARE(glm_ivec2_minv)
|
||||||
|
TEST_DECLARE(glm_ivec2_clamp)
|
||||||
|
|
||||||
|
TEST_DECLARE(glmc_ivec2)
|
||||||
|
TEST_DECLARE(glmc_ivec2_copy)
|
||||||
|
TEST_DECLARE(glmc_ivec2_zero)
|
||||||
|
TEST_DECLARE(glmc_ivec2_one)
|
||||||
|
TEST_DECLARE(glmc_ivec2_add)
|
||||||
|
TEST_DECLARE(glmc_ivec2_adds)
|
||||||
|
TEST_DECLARE(glmc_ivec2_sub)
|
||||||
|
TEST_DECLARE(glmc_ivec2_subs)
|
||||||
|
TEST_DECLARE(glmc_ivec2_mul)
|
||||||
|
TEST_DECLARE(glmc_ivec2_scale)
|
||||||
|
TEST_DECLARE(glmc_ivec2_distance2)
|
||||||
|
TEST_DECLARE(glmc_ivec2_distance)
|
||||||
|
TEST_DECLARE(glmc_ivec2_maxv)
|
||||||
|
TEST_DECLARE(glmc_ivec2_minv)
|
||||||
|
TEST_DECLARE(glmc_ivec2_clamp)
|
||||||
|
|
||||||
|
/* ivec3 */
|
||||||
|
TEST_DECLARE(glm_ivec3)
|
||||||
|
TEST_DECLARE(glm_ivec3_copy)
|
||||||
|
TEST_DECLARE(glm_ivec3_zero)
|
||||||
|
TEST_DECLARE(glm_ivec3_one)
|
||||||
|
TEST_DECLARE(glm_ivec3_add)
|
||||||
|
TEST_DECLARE(glm_ivec3_adds)
|
||||||
|
TEST_DECLARE(glm_ivec3_sub)
|
||||||
|
TEST_DECLARE(glm_ivec3_subs)
|
||||||
|
TEST_DECLARE(glm_ivec3_mul)
|
||||||
|
TEST_DECLARE(glm_ivec3_scale)
|
||||||
|
TEST_DECLARE(glm_ivec3_distance2)
|
||||||
|
TEST_DECLARE(glm_ivec3_distance)
|
||||||
|
TEST_DECLARE(glm_ivec3_maxv)
|
||||||
|
TEST_DECLARE(glm_ivec3_minv)
|
||||||
|
TEST_DECLARE(glm_ivec3_clamp)
|
||||||
|
|
||||||
|
TEST_DECLARE(glmc_ivec3)
|
||||||
|
TEST_DECLARE(glmc_ivec3_copy)
|
||||||
|
TEST_DECLARE(glmc_ivec3_zero)
|
||||||
|
TEST_DECLARE(glmc_ivec3_one)
|
||||||
|
TEST_DECLARE(glmc_ivec3_add)
|
||||||
|
TEST_DECLARE(glmc_ivec3_adds)
|
||||||
|
TEST_DECLARE(glmc_ivec3_sub)
|
||||||
|
TEST_DECLARE(glmc_ivec3_subs)
|
||||||
|
TEST_DECLARE(glmc_ivec3_mul)
|
||||||
|
TEST_DECLARE(glmc_ivec3_scale)
|
||||||
|
TEST_DECLARE(glmc_ivec3_distance2)
|
||||||
|
TEST_DECLARE(glmc_ivec3_distance)
|
||||||
|
TEST_DECLARE(glmc_ivec3_maxv)
|
||||||
|
TEST_DECLARE(glmc_ivec3_minv)
|
||||||
|
TEST_DECLARE(glmc_ivec3_clamp)
|
||||||
|
|
||||||
|
/* ivec4 */
|
||||||
|
TEST_DECLARE(glm_ivec4)
|
||||||
|
TEST_DECLARE(glm_ivec4_copy)
|
||||||
|
TEST_DECLARE(glm_ivec4_zero)
|
||||||
|
TEST_DECLARE(glm_ivec4_one)
|
||||||
|
TEST_DECLARE(glm_ivec4_add)
|
||||||
|
TEST_DECLARE(glm_ivec4_adds)
|
||||||
|
TEST_DECLARE(glm_ivec4_sub)
|
||||||
|
TEST_DECLARE(glm_ivec4_subs)
|
||||||
|
TEST_DECLARE(glm_ivec4_mul)
|
||||||
|
TEST_DECLARE(glm_ivec4_scale)
|
||||||
|
TEST_DECLARE(glm_ivec4_distance2)
|
||||||
|
TEST_DECLARE(glm_ivec4_distance)
|
||||||
|
TEST_DECLARE(glm_ivec4_maxv)
|
||||||
|
TEST_DECLARE(glm_ivec4_minv)
|
||||||
|
TEST_DECLARE(glm_ivec4_clamp)
|
||||||
|
|
||||||
|
TEST_DECLARE(glmc_ivec4)
|
||||||
|
TEST_DECLARE(glmc_ivec4_copy)
|
||||||
|
TEST_DECLARE(glmc_ivec4_zero)
|
||||||
|
TEST_DECLARE(glmc_ivec4_one)
|
||||||
|
TEST_DECLARE(glmc_ivec4_add)
|
||||||
|
TEST_DECLARE(glmc_ivec4_adds)
|
||||||
|
TEST_DECLARE(glmc_ivec4_sub)
|
||||||
|
TEST_DECLARE(glmc_ivec4_subs)
|
||||||
|
TEST_DECLARE(glmc_ivec4_mul)
|
||||||
|
TEST_DECLARE(glmc_ivec4_scale)
|
||||||
|
TEST_DECLARE(glmc_ivec4_distance2)
|
||||||
|
TEST_DECLARE(glmc_ivec4_distance)
|
||||||
|
TEST_DECLARE(glmc_ivec4_maxv)
|
||||||
|
TEST_DECLARE(glmc_ivec4_minv)
|
||||||
|
TEST_DECLARE(glmc_ivec4_clamp)
|
||||||
|
|
||||||
|
/* structs */
|
||||||
TEST_DECLARE(mat3s_identity_init)
|
TEST_DECLARE(mat3s_identity_init)
|
||||||
TEST_DECLARE(mat3s_zero_init)
|
TEST_DECLARE(mat3s_zero_init)
|
||||||
TEST_DECLARE(mat4s_identity_init)
|
TEST_DECLARE(mat4s_identity_init)
|
||||||
@@ -1075,8 +1169,6 @@ TEST_LIST {
|
|||||||
TEST_ENTRY(bezier)
|
TEST_ENTRY(bezier)
|
||||||
|
|
||||||
/* vec2 */
|
/* vec2 */
|
||||||
/* Macros */
|
|
||||||
|
|
||||||
TEST_ENTRY(MACRO_GLM_VEC2_ONE_INIT)
|
TEST_ENTRY(MACRO_GLM_VEC2_ONE_INIT)
|
||||||
TEST_ENTRY(MACRO_GLM_VEC2_ZERO_INIT)
|
TEST_ENTRY(MACRO_GLM_VEC2_ZERO_INIT)
|
||||||
TEST_ENTRY(MACRO_GLM_VEC2_ONE)
|
TEST_ENTRY(MACRO_GLM_VEC2_ONE)
|
||||||
@@ -1157,8 +1249,6 @@ TEST_LIST {
|
|||||||
TEST_ENTRY(glmc_vec2_complex_div)
|
TEST_ENTRY(glmc_vec2_complex_div)
|
||||||
|
|
||||||
/* vec3 */
|
/* vec3 */
|
||||||
/* Macros */
|
|
||||||
|
|
||||||
TEST_ENTRY(MACRO_GLM_VEC3_ONE_INIT)
|
TEST_ENTRY(MACRO_GLM_VEC3_ONE_INIT)
|
||||||
TEST_ENTRY(MACRO_GLM_VEC3_ZERO_INIT)
|
TEST_ENTRY(MACRO_GLM_VEC3_ZERO_INIT)
|
||||||
TEST_ENTRY(MACRO_GLM_VEC3_ONE)
|
TEST_ENTRY(MACRO_GLM_VEC3_ONE)
|
||||||
@@ -1322,8 +1412,6 @@ TEST_LIST {
|
|||||||
TEST_ENTRY(glmc_vec3_sqrt)
|
TEST_ENTRY(glmc_vec3_sqrt)
|
||||||
|
|
||||||
/* vec4 */
|
/* vec4 */
|
||||||
/* Macros */
|
|
||||||
|
|
||||||
TEST_ENTRY(MACRO_GLM_VEC4_ONE_INIT)
|
TEST_ENTRY(MACRO_GLM_VEC4_ONE_INIT)
|
||||||
TEST_ENTRY(MACRO_GLM_VEC4_ZERO_INIT)
|
TEST_ENTRY(MACRO_GLM_VEC4_ZERO_INIT)
|
||||||
TEST_ENTRY(MACRO_GLM_VEC4_ONE)
|
TEST_ENTRY(MACRO_GLM_VEC4_ONE)
|
||||||
@@ -1469,6 +1557,105 @@ TEST_LIST {
|
|||||||
TEST_ENTRY(glmc_vec4_hadd)
|
TEST_ENTRY(glmc_vec4_hadd)
|
||||||
TEST_ENTRY(glmc_vec4_sqrt)
|
TEST_ENTRY(glmc_vec4_sqrt)
|
||||||
|
|
||||||
|
/* ivec2 */
|
||||||
|
TEST_ENTRY(glm_ivec2)
|
||||||
|
TEST_ENTRY(glm_ivec2_copy)
|
||||||
|
TEST_ENTRY(glm_ivec2_zero)
|
||||||
|
TEST_ENTRY(glm_ivec2_one)
|
||||||
|
TEST_ENTRY(glm_ivec2_add)
|
||||||
|
TEST_ENTRY(glm_ivec2_adds)
|
||||||
|
TEST_ENTRY(glm_ivec2_sub)
|
||||||
|
TEST_ENTRY(glm_ivec2_subs)
|
||||||
|
TEST_ENTRY(glm_ivec2_mul)
|
||||||
|
TEST_ENTRY(glm_ivec2_scale)
|
||||||
|
TEST_ENTRY(glm_ivec2_distance2)
|
||||||
|
TEST_ENTRY(glm_ivec2_distance)
|
||||||
|
TEST_ENTRY(glm_ivec2_maxv)
|
||||||
|
TEST_ENTRY(glm_ivec2_minv)
|
||||||
|
TEST_ENTRY(glm_ivec2_clamp)
|
||||||
|
|
||||||
|
TEST_ENTRY(glmc_ivec2)
|
||||||
|
TEST_ENTRY(glmc_ivec2_copy)
|
||||||
|
TEST_ENTRY(glmc_ivec2_zero)
|
||||||
|
TEST_ENTRY(glmc_ivec2_one)
|
||||||
|
TEST_ENTRY(glmc_ivec2_add)
|
||||||
|
TEST_ENTRY(glmc_ivec2_adds)
|
||||||
|
TEST_ENTRY(glmc_ivec2_sub)
|
||||||
|
TEST_ENTRY(glmc_ivec2_subs)
|
||||||
|
TEST_ENTRY(glmc_ivec2_mul)
|
||||||
|
TEST_ENTRY(glmc_ivec2_scale)
|
||||||
|
TEST_ENTRY(glmc_ivec2_distance2)
|
||||||
|
TEST_ENTRY(glmc_ivec2_distance)
|
||||||
|
TEST_ENTRY(glmc_ivec2_maxv)
|
||||||
|
TEST_ENTRY(glmc_ivec2_minv)
|
||||||
|
TEST_ENTRY(glmc_ivec2_clamp)
|
||||||
|
|
||||||
|
/* ivec3 */
|
||||||
|
TEST_ENTRY(glm_ivec3)
|
||||||
|
TEST_ENTRY(glm_ivec3_copy)
|
||||||
|
TEST_ENTRY(glm_ivec3_zero)
|
||||||
|
TEST_ENTRY(glm_ivec3_one)
|
||||||
|
TEST_ENTRY(glm_ivec3_add)
|
||||||
|
TEST_ENTRY(glm_ivec3_adds)
|
||||||
|
TEST_ENTRY(glm_ivec3_sub)
|
||||||
|
TEST_ENTRY(glm_ivec3_subs)
|
||||||
|
TEST_ENTRY(glm_ivec3_mul)
|
||||||
|
TEST_ENTRY(glm_ivec3_scale)
|
||||||
|
TEST_ENTRY(glm_ivec3_distance2)
|
||||||
|
TEST_ENTRY(glm_ivec3_distance)
|
||||||
|
TEST_ENTRY(glm_ivec3_maxv)
|
||||||
|
TEST_ENTRY(glm_ivec3_minv)
|
||||||
|
TEST_ENTRY(glm_ivec3_clamp)
|
||||||
|
|
||||||
|
TEST_ENTRY(glmc_ivec3)
|
||||||
|
TEST_ENTRY(glmc_ivec3_copy)
|
||||||
|
TEST_ENTRY(glmc_ivec3_zero)
|
||||||
|
TEST_ENTRY(glmc_ivec3_one)
|
||||||
|
TEST_ENTRY(glmc_ivec3_add)
|
||||||
|
TEST_ENTRY(glmc_ivec3_adds)
|
||||||
|
TEST_ENTRY(glmc_ivec3_sub)
|
||||||
|
TEST_ENTRY(glmc_ivec3_subs)
|
||||||
|
TEST_ENTRY(glmc_ivec3_mul)
|
||||||
|
TEST_ENTRY(glmc_ivec3_scale)
|
||||||
|
TEST_ENTRY(glmc_ivec3_distance2)
|
||||||
|
TEST_ENTRY(glmc_ivec3_distance)
|
||||||
|
TEST_ENTRY(glmc_ivec3_maxv)
|
||||||
|
TEST_ENTRY(glmc_ivec3_minv)
|
||||||
|
TEST_ENTRY(glmc_ivec3_clamp)
|
||||||
|
|
||||||
|
/* ivec4 */
|
||||||
|
TEST_ENTRY(glm_ivec4)
|
||||||
|
TEST_ENTRY(glm_ivec4_copy)
|
||||||
|
TEST_ENTRY(glm_ivec4_zero)
|
||||||
|
TEST_ENTRY(glm_ivec4_one)
|
||||||
|
TEST_ENTRY(glm_ivec4_add)
|
||||||
|
TEST_ENTRY(glm_ivec4_adds)
|
||||||
|
TEST_ENTRY(glm_ivec4_sub)
|
||||||
|
TEST_ENTRY(glm_ivec4_subs)
|
||||||
|
TEST_ENTRY(glm_ivec4_mul)
|
||||||
|
TEST_ENTRY(glm_ivec4_scale)
|
||||||
|
TEST_ENTRY(glm_ivec4_distance2)
|
||||||
|
TEST_ENTRY(glm_ivec4_distance)
|
||||||
|
TEST_ENTRY(glm_ivec4_maxv)
|
||||||
|
TEST_ENTRY(glm_ivec4_minv)
|
||||||
|
TEST_ENTRY(glm_ivec4_clamp)
|
||||||
|
|
||||||
|
TEST_ENTRY(glmc_ivec4)
|
||||||
|
TEST_ENTRY(glmc_ivec4_copy)
|
||||||
|
TEST_ENTRY(glmc_ivec4_zero)
|
||||||
|
TEST_ENTRY(glmc_ivec4_one)
|
||||||
|
TEST_ENTRY(glmc_ivec4_add)
|
||||||
|
TEST_ENTRY(glmc_ivec4_adds)
|
||||||
|
TEST_ENTRY(glmc_ivec4_sub)
|
||||||
|
TEST_ENTRY(glmc_ivec4_subs)
|
||||||
|
TEST_ENTRY(glmc_ivec4_mul)
|
||||||
|
TEST_ENTRY(glmc_ivec4_scale)
|
||||||
|
TEST_ENTRY(glmc_ivec4_distance2)
|
||||||
|
TEST_ENTRY(glmc_ivec4_distance)
|
||||||
|
TEST_ENTRY(glmc_ivec4_maxv)
|
||||||
|
TEST_ENTRY(glmc_ivec4_minv)
|
||||||
|
TEST_ENTRY(glmc_ivec4_clamp)
|
||||||
|
|
||||||
/* structs */
|
/* structs */
|
||||||
TEST_ENTRY(mat3s_identity_init)
|
TEST_ENTRY(mat3s_identity_init)
|
||||||
TEST_ENTRY(mat3s_zero_init)
|
TEST_ENTRY(mat3s_zero_init)
|
||||||
|
|||||||
@@ -39,6 +39,9 @@
|
|||||||
<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_camera.h" />
|
||||||
<ClInclude Include="..\test\src\test_common.h" />
|
<ClInclude Include="..\test\src\test_common.h" />
|
||||||
|
<ClInclude Include="..\test\src\test_ivec2.h" />
|
||||||
|
<ClInclude Include="..\test\src\test_ivec3.h" />
|
||||||
|
<ClInclude Include="..\test\src\test_ivec4.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" />
|
||||||
<ClInclude Include="..\test\src\test_mat4.h" />
|
<ClInclude Include="..\test\src\test_mat4.h" />
|
||||||
|
|||||||
@@ -100,5 +100,14 @@
|
|||||||
<ClInclude Include="..\test\src\test_camera.h">
|
<ClInclude Include="..\test\src\test_camera.h">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\test\src\test_ivec2.h">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\test\src\test_ivec3.h">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\test\src\test_ivec4.h">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -43,6 +43,9 @@
|
|||||||
<ClCompile Include="..\src\euler.c" />
|
<ClCompile Include="..\src\euler.c" />
|
||||||
<ClCompile Include="..\src\frustum.c" />
|
<ClCompile Include="..\src\frustum.c" />
|
||||||
<ClCompile Include="..\src\io.c" />
|
<ClCompile Include="..\src\io.c" />
|
||||||
|
<ClCompile Include="..\src\ivec2.c" />
|
||||||
|
<ClCompile Include="..\src\ivec3.c" />
|
||||||
|
<ClCompile Include="..\src\ivec4.c" />
|
||||||
<ClCompile Include="..\src\mat2.c" />
|
<ClCompile Include="..\src\mat2.c" />
|
||||||
<ClCompile Include="..\src\mat3.c" />
|
<ClCompile Include="..\src\mat3.c" />
|
||||||
<ClCompile Include="..\src\mat4.c" />
|
<ClCompile Include="..\src\mat4.c" />
|
||||||
@@ -57,6 +60,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\include\cglm\affine-mat.h" />
|
<ClInclude Include="..\include\cglm\affine-mat.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\affine-post.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\affine-pre.h" />
|
||||||
<ClInclude Include="..\include\cglm\affine.h" />
|
<ClInclude Include="..\include\cglm\affine.h" />
|
||||||
<ClInclude Include="..\include\cglm\affine2d.h" />
|
<ClInclude Include="..\include\cglm\affine2d.h" />
|
||||||
<ClInclude Include="..\include\cglm\applesimd.h" />
|
<ClInclude Include="..\include\cglm\applesimd.h" />
|
||||||
@@ -87,6 +92,9 @@
|
|||||||
<ClInclude Include="..\include\cglm\call\euler.h" />
|
<ClInclude Include="..\include\cglm\call\euler.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\frustum.h" />
|
<ClInclude Include="..\include\cglm\call\frustum.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\io.h" />
|
<ClInclude Include="..\include\cglm\call\io.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\ivec2.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\ivec3.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\ivec4.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\mat2.h" />
|
<ClInclude Include="..\include\cglm\call\mat2.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\mat3.h" />
|
<ClInclude Include="..\include\cglm\call\mat3.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\mat4.h" />
|
<ClInclude Include="..\include\cglm\call\mat4.h" />
|
||||||
@@ -124,6 +132,9 @@
|
|||||||
<ClInclude Include="..\include\cglm\euler.h" />
|
<ClInclude Include="..\include\cglm\euler.h" />
|
||||||
<ClInclude Include="..\include\cglm\frustum.h" />
|
<ClInclude Include="..\include\cglm\frustum.h" />
|
||||||
<ClInclude Include="..\include\cglm\io.h" />
|
<ClInclude Include="..\include\cglm\io.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\ivec2.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\ivec3.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\ivec4.h" />
|
||||||
<ClInclude Include="..\include\cglm\mat2.h" />
|
<ClInclude Include="..\include\cglm\mat2.h" />
|
||||||
<ClInclude Include="..\include\cglm\mat3.h" />
|
<ClInclude Include="..\include\cglm\mat3.h" />
|
||||||
<ClInclude Include="..\include\cglm\mat4.h" />
|
<ClInclude Include="..\include\cglm\mat4.h" />
|
||||||
@@ -147,6 +158,8 @@
|
|||||||
<ClInclude Include="..\include\cglm\simd\x86.h" />
|
<ClInclude Include="..\include\cglm\simd\x86.h" />
|
||||||
<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-post.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\affine-pre.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\affine2d.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\box.h" />
|
<ClInclude Include="..\include\cglm\struct\box.h" />
|
||||||
@@ -159,6 +172,8 @@
|
|||||||
<ClInclude Include="..\include\cglm\struct\clipspace\persp_lh_zo.h" />
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_lh_zo.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_no.h" />
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_no.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_zo.h" />
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\project_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\project_zo.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_no.h" />
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_no.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_zo.h" />
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_zo.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\clipspace\view_rh_no.h" />
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_rh_no.h" />
|
||||||
|
|||||||
@@ -148,6 +148,15 @@
|
|||||||
<ClCompile Include="..\src\clipspace\project_zo.c">
|
<ClCompile Include="..\src\clipspace\project_zo.c">
|
||||||
<Filter>src\clipspace</Filter>
|
<Filter>src\clipspace</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\ivec4.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\ivec3.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\ivec2.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\config.h">
|
<ClInclude Include="..\src\config.h">
|
||||||
@@ -558,5 +567,41 @@
|
|||||||
<ClInclude Include="..\include\cglm\call\clipspace\project_zo.h">
|
<ClInclude Include="..\include\cglm\call\clipspace\project_zo.h">
|
||||||
<Filter>include\cglm\call\clipspace</Filter>
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\ivec2.h">
|
||||||
|
<Filter>include\cglm\call</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\ivec3.h">
|
||||||
|
<Filter>include\cglm\call</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\ivec4.h">
|
||||||
|
<Filter>include\cglm\call</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\project_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\project_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\ivec2.h">
|
||||||
|
<Filter>include\cglm</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\ivec3.h">
|
||||||
|
<Filter>include\cglm</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\ivec4.h">
|
||||||
|
<Filter>include\cglm</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\affine-post.h">
|
||||||
|
<Filter>include\cglm</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\affine-pre.h">
|
||||||
|
<Filter>include\cglm</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\affine-post.h">
|
||||||
|
<Filter>include\cglm\struct</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\affine-pre.h">
|
||||||
|
<Filter>include\cglm\struct</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Reference in New Issue
Block a user