mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
40 Commits
simd_min_m
...
affine-doc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b6eca29cf | ||
|
|
995fb2e347 | ||
|
|
838c5078b7 | ||
|
|
772238f53f | ||
|
|
b9e62b6fe5 | ||
|
|
c9e2b81e99 | ||
|
|
ee18e58815 | ||
|
|
85ee366861 | ||
|
|
0e4201b816 | ||
|
|
b7e4c96738 | ||
|
|
0d92bfc722 | ||
|
|
237432969d | ||
|
|
131ac68ad3 | ||
|
|
7e6a463256 | ||
|
|
e312f282b4 | ||
|
|
78fb330850 | ||
|
|
4896b2ea8d | ||
|
|
366e0d44e2 | ||
|
|
47a27f9d07 | ||
|
|
7957179808 | ||
|
|
3e79c4d799 | ||
|
|
af5048595f | ||
|
|
270d2b9d05 | ||
|
|
eb9a200b6c | ||
|
|
fd661d1b43 | ||
|
|
db6f9641ab | ||
|
|
125002cfb3 | ||
|
|
bb9a35caaf | ||
|
|
b89315f2c5 | ||
|
|
e80d163d71 | ||
|
|
74c5e86d0c | ||
|
|
45134b1265 | ||
|
|
b63b2b90b3 | ||
|
|
e4419c4f18 | ||
|
|
17f3ea5fab | ||
|
|
a8685ed6ab | ||
|
|
029bead207 | ||
|
|
30845124b4 | ||
|
|
80d5064476 | ||
|
|
2bd97f6599 |
236
.github/workflows/ci.yml
vendored
Normal file
236
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,236 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build_autotools:
|
||||
name: Autotools / ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-12, macos-14, ubuntu-22.04]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Autotools
|
||||
if: runner.os == 'macOS'
|
||||
run: brew upgrade && brew install autoconf automake libtool
|
||||
|
||||
- name: Generate Autotools
|
||||
run: ./autogen.sh
|
||||
|
||||
- name: Configure Autotools
|
||||
run: ./configure
|
||||
|
||||
- name: Build
|
||||
run: make
|
||||
|
||||
- name: Test
|
||||
run: make check
|
||||
|
||||
build_cmake_ios:
|
||||
name: CMake / iOS
|
||||
runs-on: macos-14
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Configure CMake
|
||||
run: |
|
||||
cmake \
|
||||
-B build \
|
||||
-GXcode \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO \
|
||||
-DCGLM_STATIC=ON \
|
||||
-DCGLM_USE_TEST=ON
|
||||
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
|
||||
build_cmake_macos:
|
||||
name: CMake / ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-12, macos-14]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Ninja
|
||||
if: runner.os == 'macOS'
|
||||
run: brew upgrade && brew install ninja
|
||||
|
||||
- name: Configure CMake
|
||||
run: |
|
||||
cmake \
|
||||
-B build \
|
||||
-GNinja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCGLM_STATIC=ON \
|
||||
-DCGLM_USE_TEST=ON
|
||||
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
|
||||
- name: Test
|
||||
working-directory: build
|
||||
run: ./tests
|
||||
|
||||
build_cmake_ubuntu:
|
||||
name: CMake / ${{ matrix.target.os }} / ${{ matrix.target.cc }}
|
||||
runs-on: ${{ matrix.target.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target:
|
||||
- { os: ubuntu-20.04, cc: gcc-11 }
|
||||
- { os: ubuntu-22.04, cc: gcc-12 }
|
||||
- { os: ubuntu-22.04, cc: gcc-13 }
|
||||
- { os: ubuntu-20.04, cc: clang-12 }
|
||||
- { os: ubuntu-22.04, cc: clang-15 }
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Compiler and Ninja
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y ${{ matrix.target.cc }} ninja-build
|
||||
|
||||
- name: Configure CMake
|
||||
run: |
|
||||
cmake \
|
||||
-B build \
|
||||
-GNinja \
|
||||
-DCMAKE_C_COMPILER=${{ matrix.target.cc }} \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCGLM_STATIC=ON \
|
||||
-DCGLM_USE_TEST=ON
|
||||
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
|
||||
- name: Test
|
||||
working-directory: build
|
||||
run: ./tests
|
||||
|
||||
build_cmake_windows:
|
||||
name: CMake / ${{ matrix.platform.name }}
|
||||
runs-on: windows-2022
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform:
|
||||
- { name: Windows (x64), flags: -A x64 }
|
||||
- { name: Windows (x86), flags: -A Win32 }
|
||||
- { name: Windows (clang-cl x64), flags: -T ClangCL -A x64 }
|
||||
- { name: Windows (clang-cl x86), flags: -T ClangCL -A Win32 }
|
||||
- { name: Windows (ARM), flags: -A ARM, skip_tests: true, skip_build: true } # This fails to build.
|
||||
- { name: Windows (ARM64), flags: -A ARM64, skip_tests: true }
|
||||
- { name: UWP (ARM64), flags: -A ARM64, -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0", skip_tests: true }
|
||||
- { name: UWP (x64), flags: -A x64 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0", skip_tests: true }
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Configure CMake
|
||||
run: cmake -B build `
|
||||
-DCGLM_STATIC=ON `
|
||||
-DCGLM_USE_TEST=ON `
|
||||
${{ matrix.platform.flags }}
|
||||
|
||||
- name: Build
|
||||
if: ${{ !matrix.platform.skip_build }}
|
||||
run: cmake --build build --config Release --parallel
|
||||
|
||||
- name: Test
|
||||
if: ${{ !matrix.platform.skip_tests }}
|
||||
working-directory: build
|
||||
run: .\Release\tests.exe
|
||||
|
||||
build_documentation:
|
||||
name: Documentation
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Install Dependencies
|
||||
working-directory: docs
|
||||
run: python3 -m pip install -r requirements.txt
|
||||
|
||||
- name: Build
|
||||
working-directory: docs
|
||||
run: sphinx-build -W --keep-going source build
|
||||
|
||||
build_meson:
|
||||
name: Meson / ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-14, ubuntu-22.04]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install meson
|
||||
run: python3 -m pip install meson ninja
|
||||
|
||||
- name: Build
|
||||
run: meson setup build -Dbuildtype=release --default-library=static -Dbuild_tests=true
|
||||
|
||||
- name: Test
|
||||
run: meson test -C build
|
||||
|
||||
build_msbuild:
|
||||
name: MSBuild / Windows
|
||||
runs-on: windows-2022
|
||||
|
||||
# This has no test yet.
|
||||
# It could also try building for ARM, ARM64, ARM64EC, but those fail currently.
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Build (x86)
|
||||
working-directory: win
|
||||
run: msbuild cglm.vcxproj /p:Configuration=Release /p:Platform=x86 /p:BuildInParallel=true
|
||||
|
||||
- name: Build (x64)
|
||||
working-directory: win
|
||||
run: msbuild cglm.vcxproj /p:Configuration=Release /p:Platform=x64 /p:BuildInParallel=true
|
||||
|
||||
build_swift:
|
||||
name: Swift ${{ matrix.swift }} / ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-12, macos-14, ubuntu-22.04]
|
||||
|
||||
# This has no test yet.
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Build
|
||||
run: swift build
|
||||
@@ -32,18 +32,23 @@ if(CGLM_USE_C99)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL)
|
||||
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
||||
|
||||
# Ref: https://skia.googlesource.com/third_party/sdl/+/refs/heads/master/CMakeLists.txt#225
|
||||
# Make sure /RTC1 is disabled, otherwise it will use functions from the CRT
|
||||
foreach(flag_var
|
||||
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||
string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
|
||||
endforeach(flag_var)
|
||||
add_definitions(-D_WINDOWS -D_USRDLL)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
|
||||
add_definitions(-DNDEBUG)
|
||||
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
||||
foreach(flag_var
|
||||
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||
string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
|
||||
endforeach(flag_var)
|
||||
endif()
|
||||
else()
|
||||
add_compile_options(-Wall -O3)
|
||||
add_compile_options(-Wall)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
|
||||
add_compile_options(-O3)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
get_directory_property(hasParent PARENT_DIRECTORY)
|
||||
|
||||
@@ -198,10 +198,13 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
||||
include/cglm/struct/affine2d.h \
|
||||
include/cglm/struct/vec2.h \
|
||||
include/cglm/struct/vec2-ext.h \
|
||||
include/cglm/struct/ivec2.h \
|
||||
include/cglm/struct/vec3.h \
|
||||
include/cglm/struct/vec3-ext.h \
|
||||
include/cglm/struct/ivec3.h \
|
||||
include/cglm/struct/vec4.h \
|
||||
include/cglm/struct/vec4-ext.h \
|
||||
include/cglm/struct/ivec4.h \
|
||||
include/cglm/struct/io.h \
|
||||
include/cglm/struct/cam.h \
|
||||
include/cglm/struct/quat.h \
|
||||
|
||||
14
README.md
14
README.md
@@ -5,14 +5,10 @@
|
||||
</p>
|
||||
<br>
|
||||
<p align="center">
|
||||
<a href="https://travis-ci.com/recp/cglm">
|
||||
<img src="https://travis-ci.com/recp/cglm.svg?branch=master"
|
||||
<a href="https://github.com/recp/cglm/actions/workflows/ci.yml">
|
||||
<img src="https://github.com/recp/cglm/actions/workflows/ci.yml/badge.svg"
|
||||
alt="Build Status">
|
||||
</a>
|
||||
<a href="https://ci.appveyor.com/project/recp/cglm/branch/master">
|
||||
<img src="https://ci.appveyor.com/api/projects/status/av7l3gc0yhfex8y4/branch/master?svg=true"
|
||||
alt="Windows Build Status">
|
||||
</a>
|
||||
<a href="http://cglm.readthedocs.io/en/latest/?badge=latest">
|
||||
<img src="https://readthedocs.org/projects/cglm/badge/?version=latest"
|
||||
alt="Documentation Status">
|
||||
@@ -66,7 +62,7 @@ you have the latest version
|
||||
- **[major change]** by starting v0.5.0, vec3 functions use **glm_vec3_** namespace, it was **glm_vec_** until v0.5.0
|
||||
- **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types
|
||||
- **[major change]** by starting v0.7.3, inline print functions are disabled in release/production mode to eliminate print costs (see options in documentation). Print output also improved. You can disable colors if you need (see documentation)
|
||||
- **[major change]** by starting v0.8.3, **cglm** supports alternative clipspace configuations e.g. Left Handed, Zero-to-One (_zo)... `CGLM_FORCE_DEPTH_ZERO_TO_ONE` and `CGLM_FORCE_LEFT_HANDED` is provided to control clipspace. You should be able to use **cglm** with Vulkan, DirectX and Metal now... see https://cglm.readthedocs.io/en/latest/opt.html#clipspace-option-s
|
||||
- **[major change]** by starting v0.8.3, **cglm** supports alternative clipspace configurations e.g. Left Handed, Zero-to-One (_zo)... `CGLM_FORCE_DEPTH_ZERO_TO_ONE` and `CGLM_FORCE_LEFT_HANDED` is provided to control clipspace. You should be able to use **cglm** with Vulkan, DirectX and Metal now... see https://cglm.readthedocs.io/en/latest/opt.html#clipspace-option-s
|
||||
|
||||
#### 📌 Note for C++ developers:
|
||||
If you are not aware of the original GLM library yet, you may also want to look at:
|
||||
@@ -108,7 +104,7 @@ https://github.com/g-truc/glm
|
||||
|
||||
## 🚀 Features
|
||||
- **scalar** and **simd** (sse, avx, neon...) optimizations
|
||||
- option to use different clipspaces e.g. Left Handed, Zero-to-One... (currrently right handed negative-one is default)
|
||||
- option to use different clipspaces e.g. Left Handed, Zero-to-One... (currently right handed negative-one is default)
|
||||
- array api and struct api, you can use arrays or structs.
|
||||
- general purpose matrix operations (mat4, mat3)
|
||||
- chain matrix multiplication (square only)
|
||||
@@ -148,7 +144,7 @@ To call pre-compiled versions, just use `glmc_` (c stands for 'call') instead of
|
||||
glm_mul(trans, rot, rt); /* inline */
|
||||
glmc_mul(trans, rot, rt); /* call from library */
|
||||
```
|
||||
Most of math functions are optimized manualy with SSE2 if available, if not? Dont worry there are non-sse versions of all operations
|
||||
Most of math functions are optimized manually with SSE2 if available, if not? Dont worry there are non-sse versions of all operations
|
||||
|
||||
You can pass matrices and vectors as array to functions rather than get address.
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
image: Visual Studio 2017
|
||||
|
||||
build_script:
|
||||
- ps: >-
|
||||
cd win
|
||||
|
||||
.\build.bat
|
||||
0
autogen.sh
Normal file → Executable file
0
autogen.sh
Normal file → Executable file
0
docs/make.bat
Normal file → Executable file
0
docs/make.bat
Normal file → Executable file
@@ -1,4 +1,4 @@
|
||||
# Defining the exact version will make sure things don't break
|
||||
sphinx==5.3.0
|
||||
sphinx_rtd_theme==1.1.1
|
||||
readthedocs-sphinx-search==0.1.1
|
||||
sphinx==7.2.6
|
||||
sphinx_rtd_theme==2.0.0
|
||||
readthedocs-sphinx-search==0.3.2
|
||||
|
||||
@@ -17,16 +17,22 @@ convert it before and after calling a cglm aabb2d function.
|
||||
Table of contents (click to go):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Macros:
|
||||
|
||||
1. :c:func:`glm_aabb2d_size`
|
||||
|
||||
Functions:
|
||||
|
||||
1. :c:func:`glm_aabb2d_copy`
|
||||
#. :c:func:`glm_aabb2d_zero`
|
||||
#. :c:func:`glm_aabb2d_transform`
|
||||
#. :c:func:`glm_aabb2d_merge`
|
||||
#. :c:func:`glm_aabb2d_crop`
|
||||
#. :c:func:`glm_aabb2d_crop_until`
|
||||
#. :c:func:`glm_aabb2d_invalidate`
|
||||
#. :c:func:`glm_aabb2d_isvalid`
|
||||
#. :c:func:`glm_aabb2d_size`
|
||||
#. :c:func:`glm_aabb2d_diag`
|
||||
#. :c:func:`glm_aabb2d_sizev`
|
||||
#. :c:func:`glm_aabb2d_radius`
|
||||
#. :c:func:`glm_aabb2d_center`
|
||||
#. :c:func:`glm_aabb2d_aabb`
|
||||
@@ -45,6 +51,13 @@ Functions documentation
|
||||
| *[in]* **aabb** bounding box
|
||||
| *[out]* **dest** destination
|
||||
|
||||
.. c:function:: void glm_aabb2d_zero(vec2 aabb[2])
|
||||
|
||||
| makes all members of [aabb] 0.0f (zero)
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **aabb** bounding box
|
||||
|
||||
.. c:function:: void glm_aabb2d_transform(vec2 aabb[2], mat3 m, vec2 dest[2])
|
||||
|
||||
| apply transform to Axis-Aligned Bounding Box
|
||||
@@ -89,7 +102,7 @@ Functions documentation
|
||||
Parameters:
|
||||
| *[in]* **aabb** bounding box
|
||||
| *[in]* **cropAabb** crop box
|
||||
| *[in]* **clampAabb** miniumum box
|
||||
| *[in]* **clampAabb** minimum box
|
||||
| *[out]* **dest** cropped bounding box
|
||||
|
||||
.. c:function:: void glm_aabb2d_invalidate(vec2 aabb[2])
|
||||
@@ -111,9 +124,9 @@ Functions documentation
|
||||
Returns:
|
||||
returns true if aabb is valid otherwise false
|
||||
|
||||
.. c:function:: float glm_aabb2d_size(vec2 aabb[2])
|
||||
.. c:function:: float glm_aabb2d_diag(vec2 aabb[2])
|
||||
|
||||
| distance between of min and max
|
||||
| distance between min and max
|
||||
|
||||
Parameters:
|
||||
| *[in]* **aabb** bounding box
|
||||
@@ -121,6 +134,18 @@ Functions documentation
|
||||
Returns:
|
||||
distance between min - max
|
||||
|
||||
|
||||
.. c:function:: void glm_aabb2d_sizev(vec2 aabb[2], vec2 dest)
|
||||
|
||||
| size vector of aabb
|
||||
|
||||
Parameters:
|
||||
| *[in]* **aabb** bounding box
|
||||
| *[out]* **dest** size vector
|
||||
|
||||
Returns:
|
||||
size vector of aabb max - min
|
||||
|
||||
.. c:function:: float glm_aabb2d_radius(vec2 aabb[2])
|
||||
|
||||
| radius of sphere which surrounds AABB
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
3D Affine Transforms (common)
|
||||
================================================================================
|
||||
|
||||
Common transfrom functions.
|
||||
Common transform functions.
|
||||
|
||||
Table of contents (click to go):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -30,7 +30,7 @@ Functions documentation
|
||||
creates NEW translate transform matrix by *v* vector.
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y, z]
|
||||
|
||||
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
||||
@@ -38,7 +38,7 @@ Functions documentation
|
||||
scale existing transform matrix by *v* vector and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **v** scale vector [x, y, z]
|
||||
| *[out]* **dest** scaled matrix
|
||||
|
||||
@@ -47,7 +47,7 @@ Functions documentation
|
||||
creates NEW scale matrix by v vector
|
||||
|
||||
Parameters:
|
||||
| *[out]* **m** affine transfrom
|
||||
| *[out]* **m** affine transform
|
||||
| *[in]* **v** scale vector [x, y, z]
|
||||
|
||||
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
||||
@@ -56,7 +56,7 @@ Functions documentation
|
||||
and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** scale vector [x, y, z]
|
||||
|
||||
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
||||
@@ -65,7 +65,7 @@ Functions documentation
|
||||
and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** scale factor
|
||||
|
||||
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
||||
@@ -74,7 +74,7 @@ Functions documentation
|
||||
axis will be normalized so you don't need to normalize it
|
||||
|
||||
Parameters:
|
||||
| *[out]* **m** affine transfrom
|
||||
| *[out]* **m** affine transform
|
||||
| *[in]* **axis** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
|
||||
@@ -86,7 +86,7 @@ Functions documentation
|
||||
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
@@ -123,7 +123,7 @@ Functions documentation
|
||||
DON'T pass projected matrix here
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[out]* **t** translation vector
|
||||
| *[out]* **r** rotation matrix (mat4)
|
||||
| *[out]* **s** scaling vector [X, Y, Z]
|
||||
|
||||
@@ -25,7 +25,7 @@ You cannot use :c:func:`glm_mul` anymore.
|
||||
Same is also true for :c:func:`glm_inv_tr` if you only have rotation and
|
||||
translation then it will work as expected, otherwise you cannot use that.
|
||||
|
||||
In the future it may accept scale factors too but currectly it does not.
|
||||
In the future it may accept scale factors too but currently it does not.
|
||||
|
||||
Table of contents (click func go):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -3,10 +3,8 @@
|
||||
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
|
||||
Post transform 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) transform.
|
||||
|
||||
Table of contents (click to go):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -33,7 +31,7 @@ Functions documentation
|
||||
translate existing transform matrix by *v* vector and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y, z]
|
||||
| *[out]* **dest** translated matrix
|
||||
|
||||
@@ -43,7 +41,7 @@ Functions documentation
|
||||
and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y, z]
|
||||
|
||||
.. c:function:: void glm_translated_x(mat4 m, float x)
|
||||
@@ -51,7 +49,7 @@ Functions documentation
|
||||
translate existing transform matrix by x factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** x factor
|
||||
|
||||
.. c:function:: void glm_translated_y(mat4 m, float y)
|
||||
@@ -59,7 +57,7 @@ Functions documentation
|
||||
translate existing transform matrix by *y* factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** y factor
|
||||
|
||||
.. c:function:: void glm_translated_z(mat4 m, float z)
|
||||
@@ -67,7 +65,7 @@ Functions documentation
|
||||
translate existing transform matrix by *z* factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** z factor
|
||||
|
||||
.. c:function:: void glm_rotated_x(mat4 m, float angle, mat4 dest)
|
||||
@@ -76,7 +74,7 @@ Functions documentation
|
||||
and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[out]* **dest** rotated matrix
|
||||
|
||||
@@ -86,7 +84,7 @@ Functions documentation
|
||||
and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[out]* **dest** rotated matrix
|
||||
|
||||
@@ -96,7 +94,7 @@ Functions documentation
|
||||
and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[out]* **dest** rotated matrix
|
||||
|
||||
@@ -105,7 +103,7 @@ Functions documentation
|
||||
rotate existing transform matrix around Z axis by angle and axis
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
|
||||
@@ -114,7 +112,7 @@ Functions documentation
|
||||
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
@@ -124,6 +122,6 @@ Functions documentation
|
||||
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
3D Affine Transforms (pre)
|
||||
================================================================================
|
||||
|
||||
Pre transfrom functions which are regular transfrom functions.
|
||||
Pre transform functions which are regular transform functions.
|
||||
|
||||
Table of contents (click to go):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -41,7 +41,7 @@ Functions documentation
|
||||
translate existing transform matrix by *v* vector and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y, z]
|
||||
| *[out]* **dest** translated matrix
|
||||
|
||||
@@ -51,7 +51,7 @@ Functions documentation
|
||||
and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y, z]
|
||||
|
||||
.. c:function:: void glm_translate_x(mat4 m, float x)
|
||||
@@ -59,7 +59,7 @@ Functions documentation
|
||||
translate existing transform matrix by x factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** x factor
|
||||
|
||||
.. c:function:: void glm_translate_y(mat4 m, float y)
|
||||
@@ -67,7 +67,7 @@ Functions documentation
|
||||
translate existing transform matrix by *y* factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** y factor
|
||||
|
||||
.. c:function:: void glm_translate_z(mat4 m, float z)
|
||||
@@ -75,59 +75,16 @@ Functions documentation
|
||||
translate existing transform matrix by *z* factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[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]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[out]* **dest** rotated matrix
|
||||
|
||||
@@ -137,7 +94,7 @@ Functions documentation
|
||||
and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[out]* **dest** rotated matrix
|
||||
|
||||
@@ -147,26 +104,33 @@ Functions documentation
|
||||
and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[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
|
||||
rotate existing transform matrix around given axis by angle at ORIGIN (0,0,0)
|
||||
|
||||
**❗️IMPORTANT ❗️**
|
||||
|
||||
If you need to rotate object around itself e.g. center of object or at
|
||||
some point [of object] then `glm_rotate_at()` would be better choice to do so.
|
||||
|
||||
Even if object's model transform is identiy, rotation may not be around
|
||||
center of object if object does not lay out at ORIGIN perfectly.
|
||||
|
||||
Using `glm_rotate_at()` with center of bounding shape ( AABB, Sphere ... )
|
||||
would be an easy option to rotate around object if object is not at origin.
|
||||
|
||||
One another option to rotate around itself at any point is `glm_spin()`
|
||||
which is perfect if only rotating around model position is desired e.g. not
|
||||
specific point on model for instance center of geometry or center of mass,
|
||||
again if geometry is not perfectly centered at origin at identity transform,
|
||||
rotation may not be around geometry.
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
|
||||
@@ -175,66 +139,16 @@ Functions documentation
|
||||
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[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, out]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[in]* **axis** axis
|
||||
|
||||
@@ -13,7 +13,7 @@ Post functions (`T' = T * Tnew`) are like `glm_translated`, `glm_rotated` which
|
||||
`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).
|
||||
they are useful in some cases, e.g. append transform to existing transform (apply/append transform as last transform 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.
|
||||
|
||||
@@ -24,7 +24,7 @@ a matrix for you. You don't need to pass identity matrix.
|
||||
|
||||
But other functions expect you have a matrix and you want to transform them. If
|
||||
you didn't have any existing matrix you have to initialize matrix to identity
|
||||
before sending to transfrom functions.
|
||||
before sending to transform functions.
|
||||
|
||||
There are also functions to decompose transform matrix. These functions can't
|
||||
decompose matrix after projected.
|
||||
@@ -35,7 +35,7 @@ Rotation Center
|
||||
Rotating functions uses origin as rotation center (pivot/anchor point),
|
||||
since scale factors are stored in rotation matrix, same may also true for scalling.
|
||||
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 algorithm ("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.
|
||||
@@ -43,7 +43,7 @@ These functions are useful for rotating around center of object.
|
||||
Rotate or Scale around specific Point (Anchor Point)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you want to rotate model around arbibtrary point follow these steps:
|
||||
If you want to rotate model around arbitrary point follow these steps:
|
||||
|
||||
1. Move model from pivot point to origin: **translate(-pivot.x, -pivot.y, -pivot.z)**
|
||||
2. Apply rotation (or scaling maybe)
|
||||
@@ -82,11 +82,11 @@ helpers functions works like this (cglm provides reverse order as `ed` suffix e.
|
||||
.. code-block:: c
|
||||
:linenos:
|
||||
|
||||
TransformMatrix = TransformMatrix * TraslateMatrix; // glm_translate()
|
||||
TransformMatrix = TransformMatrix * TranslateMatrix; // glm_translate()
|
||||
TransformMatrix = TransformMatrix * RotateMatrix; // glm_rotate(), glm_quat_rotate()
|
||||
TransformMatrix = TransformMatrix * ScaleMatrix; // glm_scale()
|
||||
|
||||
As you can see it is multipled as right matrix. For instance what will happen if you call `glm_translate` twice?
|
||||
As you can see it is multiplied as right matrix. For instance what will happen if you call `glm_translate` twice?
|
||||
|
||||
.. code-block:: c
|
||||
:linenos:
|
||||
|
||||
@@ -14,7 +14,7 @@ a matrix for you. You don't need to pass identity matrix.
|
||||
|
||||
But other functions expect you have a matrix and you want to transform them. If
|
||||
you didn't have any existing matrix you have to initialize matrix to identity
|
||||
before sending to transfrom functions.
|
||||
before sending to transform functions.
|
||||
|
||||
Transforms Order
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -45,7 +45,7 @@ Functions:
|
||||
translate existing 2d transform matrix by *v* vector and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** 2d affine transfrom
|
||||
| *[in, out]* **m** 2d affine transform
|
||||
| *[in]* **v** translate vector [x, y]
|
||||
|
||||
.. c:function:: void glm_translate2d_to(mat3 m, vec2 v, mat3 dest)
|
||||
@@ -53,7 +53,7 @@ Functions:
|
||||
translate existing 2d transform matrix by *v* vector and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** 2d affine transfrom
|
||||
| *[in]* **m** 2d affine transform
|
||||
| *[in]* **v** translate vector [x, y]
|
||||
| *[out]* **dest** translated matrix
|
||||
|
||||
@@ -62,7 +62,7 @@ Functions:
|
||||
translate existing 2d transform matrix by x factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** 2d affine transfrom
|
||||
| *[in, out]* **m** 2d affine transform
|
||||
| *[in]* **x** x factor
|
||||
|
||||
.. c:function:: void glm_translate2d_y(mat3 m, float y)
|
||||
@@ -70,7 +70,7 @@ Functions:
|
||||
translate existing 2d transform matrix by y factor
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** 2d affine transfrom
|
||||
| *[in, out]* **m** 2d affine transform
|
||||
| *[in]* **y** y factor
|
||||
|
||||
.. c:function:: void glm_translate2d_make(mat3 m, vec2 v)
|
||||
@@ -78,7 +78,7 @@ Functions:
|
||||
creates NEW translate 2d transform matrix by *v* vector
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y]
|
||||
|
||||
.. c:function:: void glm_scale2d_to(mat3 m, vec2 v, mat3 dest)
|
||||
@@ -86,7 +86,7 @@ Functions:
|
||||
scale existing 2d transform matrix by *v* vector and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **v** scale vector [x, y]
|
||||
| *[out]* **dest** scaled matrix
|
||||
|
||||
@@ -95,7 +95,7 @@ Functions:
|
||||
creates NEW 2d scale matrix by *v* vector
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** scale vector [x, y]
|
||||
|
||||
.. c:function:: void glm_scale2d(mat3 m, vec2 v)
|
||||
@@ -103,7 +103,7 @@ Functions:
|
||||
scales existing 2d transform matrix by *v* vector and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **v** translate vector [x, y]
|
||||
|
||||
.. c:function:: void glm_scale2d_uni(mat3 m, float s)
|
||||
@@ -111,7 +111,7 @@ Functions:
|
||||
applies uniform scale to existing 2d transform matrix v = [s, s] and stores result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **s** scale factor
|
||||
|
||||
.. c:function:: void glm_rotate2d_make(mat3 m, float angle)
|
||||
@@ -119,7 +119,7 @@ Functions:
|
||||
creates NEW rotation matrix by angle around *Z* axis
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
|
||||
.. c:function:: void glm_rotate2d(mat3 m, float angle)
|
||||
@@ -127,7 +127,7 @@ Functions:
|
||||
rotate existing 2d transform matrix around *Z* axis by angle and store result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **m** affine transfrom
|
||||
| *[in, out]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
|
||||
.. c:function:: void glm_rotate2d_to(mat3 m, float angle, mat3 dest)
|
||||
@@ -135,6 +135,6 @@ Functions:
|
||||
rotate existing 2d transform matrix around *Z* axis by angle and store result in dest
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** affine transfrom
|
||||
| *[in]* **m** affine transform
|
||||
| *[in]* **angle** angle (radians)
|
||||
| *[out]* **dest** rotated matrix
|
||||
@@ -9,7 +9,7 @@ In the future there may be option to forward struct api to call api instead of i
|
||||
|
||||
📌 **USE this API docs for similar functions in struct and call api**
|
||||
|
||||
📌 In struct api you can omit namespace e.g :code:`glms_vec3_dot` can be called as :code:`vec3_dot` in struct api, see :doc:`struct-api` to configure struct api for more details.
|
||||
📌 In struct api you can omit namespace e.g :code:`glms_vec3_dot` can be called as :code:`vec3_dot` in struct api, see :doc:`api_struct` to configure struct api for more details.
|
||||
📌 In struct api functions can return struct/union
|
||||
📌 In struct api you can access items like **.x**, **.y**, **.z**, **.w**, **.r**, **.g**, **.b**, **.a**, **.m00**, **m01**...
|
||||
|
||||
@@ -43,6 +43,7 @@ Follow the :doc:`build` documentation for this
|
||||
cam
|
||||
frustum
|
||||
box
|
||||
aabb2d
|
||||
quat
|
||||
euler
|
||||
mat2
|
||||
|
||||
@@ -10,7 +10,7 @@ Also struct api `s` suffix to namespace e.g. `glms_vec3_add`, `glms_mat4_mul` et
|
||||
|
||||
By starting v0.9.0, struct api namespace is configurable. We can omit **glms_** namespace or
|
||||
even change it with custom name to move existing api integrations to **cglm** more easliy...
|
||||
We can also add **s** to functin names if we want e.g. `glms_vec3_add()` -> `vec3_add()` or `vec3s_add()`.
|
||||
We can also add **s** to function names if we want e.g. `glms_vec3_add()` -> `vec3_add()` or `vec3s_add()`.
|
||||
|
||||
By including **cglm/struct.h** header you will include all struct api. It will also include **cglm/cglm.h** too.
|
||||
Since struct apis are inline you don't need to build or link *cglm* against
|
||||
|
||||
@@ -82,7 +82,7 @@ Functions documentation
|
||||
Parameters:
|
||||
| *[in]* **box** bounding box
|
||||
| *[in]* **cropBox** crop box
|
||||
| *[in]* **clampBox** miniumum box
|
||||
| *[in]* **clampBox** minimum box
|
||||
| *[out]* **dest** cropped bounding box
|
||||
|
||||
.. c:function:: bool glm_aabb_frustum(vec3 box[2], vec4 planes[6])
|
||||
|
||||
@@ -3,9 +3,9 @@ Build cglm
|
||||
|
||||
| **cglm** does not have any external dependencies.
|
||||
|
||||
**NOTE:**
|
||||
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
||||
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
||||
.. note::
|
||||
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
||||
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
||||
|
||||
CMake (All platforms):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
precompiled functions (call)
|
||||
================================================================================
|
||||
|
||||
All funcitons in **glm_** namespace are forced to **inline**.
|
||||
All functions in **glm_** namespace are forced to **inline**.
|
||||
Most functions also have pre-compiled version.
|
||||
|
||||
Precompiled versions are in **glmc_** namespace. *c* in the namespace stands for
|
||||
"call".
|
||||
|
||||
Since precompiled functions are just wrapper for inline verisons,
|
||||
Since precompiled functions are just wrapper for inline versions,
|
||||
these functions are not documented individually.
|
||||
It would be duplicate documentation also it
|
||||
would be hard to sync documentation between inline and call verison for me.
|
||||
would be hard to sync documentation between inline and call version for me.
|
||||
|
||||
By including **clgm/cglm.h** you include all inline verisons. To get precompiled
|
||||
By including **clgm/cglm.h** you include all inline versions. To get precompiled
|
||||
versions you need to include **cglm/call.h** header it also includes all
|
||||
call versions plus *clgm/cglm.h* (inline verisons)
|
||||
call versions plus *clgm/cglm.h* (inline versions)
|
||||
|
||||
@@ -18,10 +18,10 @@ fast if you don't care specific projection values.
|
||||
*_decomp* means decompose; these function can help to decompose projection
|
||||
matrices.
|
||||
|
||||
**NOTE**: Be careful when working with high range (very small near, very large
|
||||
far) projection matrices. You may not get exact value you gave.
|
||||
**float** type cannot store very high precision so you will lose precision.
|
||||
Also your projection matrix will be inaccurate due to losing precision
|
||||
.. note:: Be careful when working with high range (very small near, very large
|
||||
far) projection matrices. You may not get exact value you gave.
|
||||
**float** type cannot store very high precision so you will lose precision.
|
||||
Also your projection matrix will be inaccurate due to losing precision
|
||||
|
||||
Table of contents (click to go):
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -178,7 +178,7 @@ Functions documentation
|
||||
|
||||
| set up view matrix
|
||||
|
||||
**NOTE:** The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
||||
.. note:: The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **eye** eye vector
|
||||
@@ -194,7 +194,7 @@ Functions documentation
|
||||
target self then this might be useful. Because you need to get target
|
||||
from direction.
|
||||
|
||||
**NOTE:** The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
||||
.. note:: The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **eye** eye vector
|
||||
@@ -250,7 +250,7 @@ Functions documentation
|
||||
.. c:function:: void glm_persp_decomp_y(mat4 proj, float *top, float *bottom)
|
||||
|
||||
| decomposes top and bottom values of perspective projection.
|
||||
| y stands for y axis (top / botom axis)
|
||||
| y stands for y axis (top / bottom axis)
|
||||
|
||||
Parameters:
|
||||
| *[in]* **proj** perspective projection matrix
|
||||
|
||||
@@ -2,7 +2,7 @@ Features
|
||||
================================================================================
|
||||
|
||||
* **scalar** and **simd** (sse, avx, neon, wasm...) optimizations
|
||||
* option to use different clipspaces e.g. Left Handed, Zero-to-One... (currrently right handed negative-one is default)
|
||||
* option to use different clipspaces e.g. Left Handed, Zero-to-One... (currently right handed negative-one is default)
|
||||
* array api and struct api, you can use arrays or structs.
|
||||
* general purpose matrix operations (mat4, mat3)
|
||||
* chain matrix multiplication (square only)
|
||||
|
||||
@@ -11,9 +11,9 @@ not **vec3**. If you want to store them to save space you msut convert them
|
||||
yourself.
|
||||
|
||||
**vec4** is used to speed up functions need to corners. This is why frustum
|
||||
fucntions use *vec4* instead of *vec3*
|
||||
functions use *vec4* instead of *vec3*
|
||||
|
||||
Currenty related-functions use [-1, 1] clip space configuration to extract
|
||||
Currently related-functions use [-1, 1] clip space configuration to extract
|
||||
corners but you can override it by prodiving **GLM_CUSTOM_CLIPSPACE** macro.
|
||||
If you provide it then you have to all bottom macros as *vec4*
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ Types:
|
||||
typedef CGLM_ALIGN_IF(16) vec4 mat4[4];
|
||||
#endif
|
||||
|
||||
As you can see types don't store extra informations in favor of space.
|
||||
As you can see types don't store extra information in favor of space.
|
||||
You can send these values e.g. matrix to OpenGL directly without casting or calling a function like *value_ptr*
|
||||
|
||||
Alignment Is Required:
|
||||
@@ -35,16 +35,16 @@ Alignment Is Required:
|
||||
|
||||
| Check :doc:`opt` page for more details
|
||||
|
||||
Also alignment is disabled for older msvc verisons as default. Now alignment is only required in Visual Studio 2017 version 15.6+ if CGLM_ALL_UNALIGNED macro is not defined.
|
||||
Also alignment is disabled for older msvc versions as default. Now alignment is only required in Visual Studio 2017 version 15.6+ if CGLM_ALL_UNALIGNED macro is not defined.
|
||||
|
||||
Allocations:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*cglm* doesn't alloc any memory on heap. So it doesn't provide any allocator.
|
||||
You must allocate memory yourself. You should alloc memory for out parameters too if you pass pointer of memory location. When allocating memory, don't forget that **vec4** and **mat4** require alignment.
|
||||
|
||||
**NOTE:** Unaligned **vec4** and unaligned **mat4** operations will be supported in the future. Check todo list.
|
||||
Because you may want to multiply a CGLM matrix with external matrix.
|
||||
There is no guarantee that non-CGLM matrix is aligned. Unaligned types will have *u* prefix e.g. **umat4**
|
||||
.. note:: Unaligned **vec4** and unaligned **mat4** operations will be supported in the future. Check todo list.
|
||||
Because you may want to multiply a CGLM matrix with external matrix.
|
||||
There is no guarantee that non-CGLM matrix is aligned. Unaligned types will have *u* prefix e.g. **umat4**
|
||||
|
||||
Array vs Struct:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -24,12 +24,12 @@ Example to print mat4 matrix:
|
||||
/* ... */
|
||||
glm_mat4_print(transform, stderr);
|
||||
|
||||
**NOTE:** print functions use **%0.4f** precision if you need more
|
||||
(you probably will in some cases), you can change it temporary.
|
||||
cglm may provide precision parameter in the future
|
||||
.. note:: print functions use **%0.4f** precision if you need more
|
||||
(you probably will in some cases), you can change it temporary.
|
||||
cglm may provide precision parameter in the future.
|
||||
|
||||
Changes since **v0.7.3**:
|
||||
* Now mis-alignment of columns are fixed: larger numbers are printed via %g and others are printed via %f. Column withs are calculated before print.
|
||||
* Now mis-alignment of columns are fixed: larger numbers are printed via %g and others are printed via %f. Column widths are calculated before print.
|
||||
* Now values are colorful ;)
|
||||
* Some print improvements
|
||||
* New options with default values:
|
||||
@@ -143,5 +143,5 @@ Functions documentation
|
||||
|
||||
Parameters:
|
||||
| *[in]* **vec** aabb (axis-aligned bounding box)
|
||||
| *[in]* **tag** tag to find it more easly in logs
|
||||
| *[in]* **tag** tag to find it more easily in logs
|
||||
| *[in]* **ostream** FILE to write
|
||||
|
||||
@@ -21,12 +21,17 @@ Functions:
|
||||
#. :c:func:`glm_ivec2_copy`
|
||||
#. :c:func:`glm_ivec2_zero`
|
||||
#. :c:func:`glm_ivec2_one`
|
||||
#. :c:func:`glm_ivec2_dot`
|
||||
#. :c:func:`glm_ivec2_cross`
|
||||
#. :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_div`
|
||||
#. :c:func:`glm_ivec2_divs`
|
||||
#. :c:func:`glm_ivec2_mod`
|
||||
#. :c:func:`glm_ivec2_distance2`
|
||||
#. :c:func:`glm_ivec2_distance`
|
||||
#. :c:func:`glm_ivec2_maxv`
|
||||
@@ -67,6 +72,30 @@ Functions documentation
|
||||
Parameters:
|
||||
| *[out]* **v** vector
|
||||
|
||||
.. c:function:: int glm_ivec2_dot(ivec2 a, ivec2 b)
|
||||
|
||||
dot product of ivec2
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector1
|
||||
| *[in]* **b** vector2
|
||||
|
||||
Returns:
|
||||
dot product
|
||||
|
||||
.. c:function:: int glm_ivec2_cross(ivec2 a, ivec2 b)
|
||||
|
||||
cross product of two vector (RH)
|
||||
|
||||
| ref: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector 1
|
||||
| *[in]* **b** vector 2
|
||||
|
||||
Returns:
|
||||
Z component of cross product
|
||||
|
||||
.. c:function:: void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
||||
|
||||
add vector [a] to vector [b] and store result in [dest]
|
||||
@@ -121,6 +150,33 @@ Functions documentation
|
||||
| *[in]* **s** scalar
|
||||
| *[out]* **dest** destination
|
||||
|
||||
.. c:function:: void glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest)
|
||||
|
||||
div vector with another component-wise division: d = a / b
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector 1
|
||||
| *[in]* **b** vector 2
|
||||
| *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2])
|
||||
|
||||
.. c:function:: void glm_ivec2_divs(ivec2 v, int s, ivec2 dest)
|
||||
|
||||
div vector with scalar: d = v / s
|
||||
|
||||
Parameters:
|
||||
| *[in]* **v** vector
|
||||
| *[in]* **s** scalar
|
||||
| *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s)
|
||||
|
||||
.. c:function:: void glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest)
|
||||
|
||||
mod vector with another component-wise modulo: d = a % b
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector
|
||||
| *[in]* **b** scalar
|
||||
| *[out]* **dest** result = (a[0] % b[0], a[1] % b[1])
|
||||
|
||||
.. c:function:: int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
||||
|
||||
squared distance between two vectors
|
||||
|
||||
@@ -21,12 +21,18 @@ Functions:
|
||||
#. :c:func:`glm_ivec3_copy`
|
||||
#. :c:func:`glm_ivec3_zero`
|
||||
#. :c:func:`glm_ivec3_one`
|
||||
#. :c:func:`glm_ivec3_dot`
|
||||
#. :c:func:`glm_ivec3_norm2`
|
||||
#. :c:func:`glm_ivec3_norm`
|
||||
#. :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_div`
|
||||
#. :c:func:`glm_ivec3_divs`
|
||||
#. :c:func:`glm_ivec3_mod`
|
||||
#. :c:func:`glm_ivec3_distance2`
|
||||
#. :c:func:`glm_ivec3_distance`
|
||||
#. :c:func:`glm_ivec3_fill`
|
||||
@@ -70,6 +76,39 @@ Functions documentation
|
||||
Parameters:
|
||||
| *[out]* **v** vector
|
||||
|
||||
.. c:function:: int glm_ivec3_dot(ivec3 a, ivec3 b)
|
||||
|
||||
dot product of ivec3
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector1
|
||||
| *[in]* **b** vector2
|
||||
|
||||
Returns:
|
||||
dot product
|
||||
|
||||
.. c:function:: int glm_ivec3_norm2(ivec3 v)
|
||||
|
||||
norm * norm (magnitude) of vector
|
||||
|
||||
we can use this func instead of calling norm * norm, because it would call
|
||||
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
not good name for this func
|
||||
|
||||
Parameters:
|
||||
| *[in]* **v** vector
|
||||
|
||||
Returns:
|
||||
square of norm / magnitude, cast to an integer
|
||||
|
||||
.. c:function:: int glm_ivec3_norm(ivec3 vec)
|
||||
|
||||
| euclidean norm (magnitude), also called L2 norm
|
||||
| this will give magnitude of vector in euclidean space
|
||||
|
||||
Parameters:
|
||||
| *[in]* **vec** vector
|
||||
|
||||
.. c:function:: void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
||||
|
||||
add vector [a] to vector [b] and store result in [dest]
|
||||
@@ -124,6 +163,33 @@ Functions documentation
|
||||
| *[in]* **s** scalar
|
||||
| *[out]* **dest** destination
|
||||
|
||||
.. c:function:: void glm_ivec3_div(ivec3 a, ivec3 b, ivec3 dest)
|
||||
|
||||
div vector with another component-wise division: d = a / b
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector 1
|
||||
| *[in]* **b** vector 2
|
||||
| *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2])
|
||||
|
||||
.. c:function:: void glm_ivec3_divs(ivec3 v, int s, ivec3 dest)
|
||||
|
||||
div vector with scalar: d = v / s
|
||||
|
||||
Parameters:
|
||||
| *[in]* **v** vector
|
||||
| *[in]* **s** scalar
|
||||
| *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s)
|
||||
|
||||
.. c:function:: void glm_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest)
|
||||
|
||||
mod vector with another component-wise modulo: d = a % b
|
||||
|
||||
Parameters:
|
||||
| *[in]* **a** vector
|
||||
| *[in]* **b** scalar
|
||||
| *[out]* **dest** result = (a[0] % b[0], a[1] % b[1], a[2] % b[2])
|
||||
|
||||
.. c:function:: int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
||||
|
||||
squared distance between two vectors
|
||||
|
||||
@@ -47,7 +47,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_mat2_identity(mat2 mat)
|
||||
|
||||
copy identity mat2 to mat, or makes mat to identiy
|
||||
copy identity mat2 to mat, or makes mat to identity
|
||||
|
||||
Parameters:
|
||||
| *[out]* **mat** matrix
|
||||
@@ -94,7 +94,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_mat2_transpose(mat2 m)
|
||||
|
||||
tranpose mat2 and store result in same matrix
|
||||
transpose mat2 and store result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in]* **mat** source
|
||||
@@ -184,7 +184,7 @@ Functions documentation
|
||||
|
||||
Create mat2 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 4 elements.
|
||||
.. note:: **@src** must contain at least 4 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -45,7 +45,7 @@ Functions documentation
|
||||
|
||||
Create mat2x3 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 6 elements.
|
||||
.. note:: **@src** must contain at least 6 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -45,7 +45,7 @@ Functions documentation
|
||||
|
||||
Create mat2x4 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 8 elements.
|
||||
.. note:: **@src** must contain at least 8 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -49,7 +49,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_mat3_identity(mat3 mat)
|
||||
|
||||
copy identity mat3 to mat, or makes mat to identiy
|
||||
copy identity mat3 to mat, or makes mat to identity
|
||||
|
||||
Parameters:
|
||||
| *[out]* **mat** matrix
|
||||
@@ -96,7 +96,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_mat3_transpose(mat3 m)
|
||||
|
||||
tranpose mat3 and store result in same matrix
|
||||
transpose mat3 and store result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in]* **mat** source
|
||||
@@ -194,7 +194,7 @@ Functions documentation
|
||||
|
||||
Create mat3 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 9 elements.
|
||||
.. note:: **@src** must contain at least 9 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -45,7 +45,8 @@ Functions documentation
|
||||
|
||||
Create mat3x2 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 6 elements.
|
||||
.. note:: **@src** must contain at least 6 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
| *[out]* **dest** destination matrix3x2
|
||||
|
||||
@@ -45,7 +45,8 @@ Functions documentation
|
||||
|
||||
Create mat3x4 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 12 elements.
|
||||
.. note::: **@src** must contain at least 12 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
| *[out]* **dest** destination matrix3x4
|
||||
|
||||
@@ -34,8 +34,8 @@ Functions:
|
||||
#. :c:func:`glm_mat4_mulN`
|
||||
#. :c:func:`glm_mat4_mulv`
|
||||
#. :c:func:`glm_mat4_mulv3`
|
||||
#. :c:func:`glm_mat3_trace`
|
||||
#. :c:func:`glm_mat3_trace3`
|
||||
#. :c:func:`glm_mat4_trace`
|
||||
#. :c:func:`glm_mat4_trace3`
|
||||
#. :c:func:`glm_mat4_quat`
|
||||
#. :c:func:`glm_mat4_transpose_to`
|
||||
#. :c:func:`glm_mat4_transpose`
|
||||
@@ -70,7 +70,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_mat4_identity(mat4 mat)
|
||||
|
||||
copy identity mat4 to mat, or makes mat to identiy
|
||||
copy identity mat4 to mat, or makes mat to identity
|
||||
|
||||
Parameters:
|
||||
| *[out]* **mat** matrix
|
||||
@@ -214,7 +214,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_mat4_transpose(mat4 m)
|
||||
|
||||
tranpose mat4 and store result in same matrix
|
||||
transpose mat4 and store result in same matrix
|
||||
|
||||
Parameters:
|
||||
| *[in]* **m** source
|
||||
@@ -263,7 +263,7 @@ Functions documentation
|
||||
| e.g Newton-Raphson. this should work faster than normal,
|
||||
| to get more precise use glm_mat4_inv version.
|
||||
|
||||
| NOTE: You will lose precision, glm_mat4_inv is more accurate
|
||||
.. note:: You will lose precision, glm_mat4_inv is more accurate
|
||||
|
||||
Parameters:
|
||||
| *[in]* **mat** source
|
||||
@@ -308,7 +308,7 @@ Functions documentation
|
||||
|
||||
Create mat4 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 16 elements.
|
||||
.. note:: **@src** must contain at least 16 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -45,7 +45,8 @@ Functions documentation
|
||||
|
||||
Create mat4x2 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 8 elements.
|
||||
.. note:: **@src** must contain at least 8 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
| *[out]* **dest** destination matrix4x2
|
||||
|
||||
@@ -45,7 +45,8 @@ Functions documentation
|
||||
|
||||
Create mat4x3 matrix from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 12 elements.
|
||||
.. note:: **@src** must contain at least 12 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
| *[out]* **dest** destination matrix4x3
|
||||
|
||||
@@ -43,14 +43,14 @@ array of matrices:
|
||||
/* ... */
|
||||
glUniformMatrix4fv(location, count, GL_FALSE, (float *)matrix);
|
||||
|
||||
in this way, passing aray of matrices is same
|
||||
in this way, passing array of matrices is same
|
||||
|
||||
Passing / Uniforming Vectors to OpenGL:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You don't need to do extra thing when passing cglm vectors to OpengL or other APIs.
|
||||
Because a function like **glUniform4fv** accepts vector as pointer. cglm's vectors
|
||||
are array of floats. So you can pass it directly ot those functions:
|
||||
are array of floats. So you can pass it directly to those functions:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ have to compile cglm with **CGLM_ALL_UNALIGNED** macro.
|
||||
if you do not know what you are doing. Because a cglm header included
|
||||
via 'project A' may force types to be aligned and another cglm header
|
||||
included via 'project B' may not require alignment. In this case
|
||||
cglm functions will read from and write to **INVALID MEMORY LOCATIONs**.
|
||||
cglm functions will read from and write to **INVALID MEMORY LOCATIONSNs**.
|
||||
|
||||
ALWAYS USE SAME CONFIGURATION / OPTION for **cglm** if you have multiple projects.
|
||||
|
||||
@@ -43,7 +43,7 @@ By starting **v0.8.3** cglm provides options to switch between clipspace configu
|
||||
Clipspace related files are located at `include/cglm/[struct]/clipspace.h` but
|
||||
these are included in related files like `cam.h`. If you don't want to change your existing
|
||||
clipspace configuration and want to use different clipspace function like `glm_lookat_zo` or `glm_lookat_lh_zo`...
|
||||
then you can include individual headers or just define `CGLM_CLIPSPACE_INCLUDE_ALL` which will iclude all headers for you.
|
||||
then you can include individual headers or just define `CGLM_CLIPSPACE_INCLUDE_ALL` which will include all headers for you.
|
||||
|
||||
1. **CGLM_CLIPSPACE_INCLUDE_ALL**
|
||||
2. **CGLM_FORCE_DEPTH_ZERO_TO_ONE**
|
||||
|
||||
@@ -426,7 +426,7 @@ Functions documentation
|
||||
|
||||
Create quaternion from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 4 elements. cglm store quaternions as [x, y, z, w].
|
||||
.. note:: **@src** must contain at least 4 elements. cglm store quaternions as [x, y, z, w].
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -9,7 +9,7 @@ Header: cglm/sphere.h
|
||||
|
||||
Sphere Representation in cglm is *vec4*: **[center.x, center.y, center.z, radii]**
|
||||
|
||||
You can call any vec3 function by pasing sphere. Because first three elements
|
||||
You can call any vec3 function by passing sphere. Because first three elements
|
||||
defines center of sphere.
|
||||
|
||||
Table of contents (click to go):
|
||||
|
||||
@@ -68,14 +68,14 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_make_rad(float *degm)
|
||||
|
||||
| convert exsisting degree to radians. this will override degrees value
|
||||
| convert existing degree to radians. this will override degrees value
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **deg** pointer to angle in degrees
|
||||
|
||||
.. c:function:: void glm_make_deg(float *rad)
|
||||
|
||||
| convert exsisting radians to degree. this will override radians value
|
||||
| convert existing radians to degree. this will override radians value
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **rad** pointer to angle in radians
|
||||
|
||||
@@ -117,7 +117,7 @@ Functions documentation
|
||||
norm * norm (magnitude) of vector
|
||||
|
||||
we can use this func instead of calling norm * norm, because it would call
|
||||
sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
not good name for this func
|
||||
|
||||
Parameters:
|
||||
@@ -389,7 +389,8 @@ Functions documentation
|
||||
|
||||
Create two dimensional vector from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 2 elements.
|
||||
.. note:: **@src** must contain at least 2 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
| *[out]* **dest** destination vector
|
||||
|
||||
@@ -13,7 +13,7 @@ Header: cglm/vec3.h
|
||||
We mostly use vectors in graphics math, to make writing code faster
|
||||
and easy to read, some *vec3* functions are aliased in global namespace.
|
||||
For instance :c:func:`glm_dot` is alias of :c:func:`glm_vec3_dot`,
|
||||
alias means inline wrapper here. There is no call verison of alias functions
|
||||
alias means inline wrapper here. There is no call version of alias functions
|
||||
|
||||
There are also functions for rotating *vec3* vector. **_m4**, **_m3** prefixes
|
||||
rotate *vec3* with matrix.
|
||||
@@ -148,7 +148,7 @@ Functions documentation
|
||||
norm * norm (magnitude) of vector
|
||||
|
||||
we can use this func instead of calling norm * norm, because it would call
|
||||
sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
not good name for this func
|
||||
|
||||
Parameters:
|
||||
@@ -309,7 +309,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec3_flipsign(vec3 v)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec3_negate`
|
||||
|
||||
@@ -318,7 +318,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec3_flipsign_to(vec3 v, vec3 dest)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec3_negate_to`
|
||||
|
||||
@@ -328,7 +328,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec3_inv(vec3 v)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec3_negate`
|
||||
|
||||
@@ -337,7 +337,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec3_inv_to(vec3 v, vec3 dest)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec3_negate_to`
|
||||
|
||||
@@ -377,7 +377,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: float glm_vec3_angle(vec3 v1, vec3 v2)
|
||||
|
||||
angle betwen two vector
|
||||
angle between two vector
|
||||
|
||||
Parameters:
|
||||
| *[in]* **v1** vector1
|
||||
@@ -507,7 +507,7 @@ Functions documentation
|
||||
|
||||
Create three dimensional vector from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 3 elements.
|
||||
.. note::: **@src** must contain at least 3 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
|
||||
@@ -108,6 +108,13 @@ Functions documentation
|
||||
Parameters:
|
||||
| *[in, out]* **v** vector
|
||||
|
||||
.. c:function:: void glm_vec4_one(vec4 v)
|
||||
|
||||
makes all members one
|
||||
|
||||
Parameters:
|
||||
| *[in, out]* **v** vector
|
||||
|
||||
.. c:function:: float glm_vec4_dot(vec4 a, vec4 b)
|
||||
|
||||
dot product of vec4
|
||||
@@ -124,7 +131,7 @@ Functions documentation
|
||||
norm * norm (magnitude) of vector
|
||||
|
||||
we can use this func instead of calling norm * norm, because it would call
|
||||
sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
not good name for this func
|
||||
|
||||
Parameters:
|
||||
@@ -284,7 +291,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec4_flipsign(vec4 v)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec4_negate`
|
||||
|
||||
@@ -293,7 +300,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec4_flipsign_to(vec4 v, vec4 dest)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec4_negate_to`
|
||||
|
||||
@@ -303,7 +310,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec4_inv(vec4 v)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec4_negate`
|
||||
|
||||
@@ -312,7 +319,7 @@ Functions documentation
|
||||
|
||||
.. c:function:: void glm_vec4_inv_to(vec4 v, vec4 dest)
|
||||
|
||||
**DEPRACATED!**
|
||||
**DEPRECATED!**
|
||||
|
||||
use :c:func:`glm_vec4_negate_to`
|
||||
|
||||
@@ -412,7 +419,8 @@ Functions documentation
|
||||
|
||||
Create four dimensional vector from pointer
|
||||
|
||||
| NOTE: **@src** must contain at least 4 elements.
|
||||
.. note:: **@src** must contain at least 4 elements.
|
||||
|
||||
Parameters:
|
||||
| *[in]* **src** pointer to an array of floats
|
||||
| *[out]* **dest** destination vector
|
||||
|
||||
@@ -10,9 +10,23 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "vec2.h"
|
||||
#include "vec4.h"
|
||||
#include "util.h"
|
||||
|
||||
/* DEPRECATED! use _diag */
|
||||
#define glm_aabb2d_size(aabb) glm_aabb2d_diag(aabb)
|
||||
|
||||
/*!
|
||||
* @brief make [aabb] zero
|
||||
*
|
||||
* @param[in, out] aabb aabb
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_aabb2d_zero(vec2 aabb[2]) {
|
||||
glm_vec2_zero(aabb[0]);
|
||||
glm_vec2_zero(aabb[1]);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief copy all members of [aabb] to [dest]
|
||||
*
|
||||
@@ -108,7 +122,7 @@ glm_aabb2d_crop(vec2 aabb[2], vec2 cropAabb[2], vec2 dest[2]) {
|
||||
*
|
||||
* @param[in] aabb bounding aabb
|
||||
* @param[in] cropAabb crop aabb
|
||||
* @param[in] clampAabb miniumum aabb
|
||||
* @param[in] clampAabb minimum aabb
|
||||
* @param[out] dest cropped bounding aabb
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -152,10 +166,22 @@ glm_aabb2d_isvalid(vec2 aabb[2]) {
|
||||
*/
|
||||
CGLM_INLINE
|
||||
float
|
||||
glm_aabb2d_size(vec2 aabb[2]) {
|
||||
glm_aabb2d_diag(vec2 aabb[2]) {
|
||||
return glm_vec2_distance(aabb[0], aabb[1]);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief size of aabb
|
||||
*
|
||||
* @param[in] aabb bounding aabb
|
||||
* @param[out] dest size
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_aabb2d_sizev(vec2 aabb[2], vec2 dest) {
|
||||
glm_vec2_sub(aabb[1], aabb[0], dest);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief radius of sphere which surrounds AABB
|
||||
*
|
||||
@@ -164,7 +190,7 @@ glm_aabb2d_size(vec2 aabb[2]) {
|
||||
CGLM_INLINE
|
||||
float
|
||||
glm_aabb2d_radius(vec2 aabb[2]) {
|
||||
return glm_aabb2d_size(aabb) * 0.5f;
|
||||
return glm_aabb2d_diag(aabb) * 0.5f;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
* @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
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -51,9 +51,9 @@ glm_translated(mat4 m, vec3 v) {
|
||||
*
|
||||
* source matrix will remain same
|
||||
*
|
||||
* this is POST transform, applies to existing transform as last transfrom
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
* @param[out] dest translated matrix
|
||||
*/
|
||||
@@ -67,9 +67,9 @@ glm_translated_to(mat4 m, vec3 v, mat4 dest) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by x factor
|
||||
*
|
||||
* this is POST transform, applies to existing transform as last transfrom
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] x x factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -81,9 +81,9 @@ glm_translated_x(mat4 m, float x) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by y factor
|
||||
*
|
||||
* this is POST transform, applies to existing transform as last transfrom
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] y y factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -95,9 +95,9 @@ glm_translated_y(mat4 m, float y) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by z factor
|
||||
*
|
||||
* this is POST transform, applies to existing transform as last transfrom
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] z z factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -110,9 +110,9 @@ glm_translated_z(mat4 m, float 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
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest rotated matrix
|
||||
*/
|
||||
@@ -137,9 +137,9 @@ glm_rotated_x(mat4 m, float angle, mat4 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
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest rotated matrix
|
||||
*/
|
||||
@@ -164,9 +164,9 @@ glm_rotated_y(mat4 m, float angle, mat4 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
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest rotated matrix
|
||||
*/
|
||||
@@ -190,9 +190,9 @@ glm_rotated_z(mat4 m, float angle, mat4 dest) {
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle
|
||||
*
|
||||
* this is POST transform, applies to existing transform as last transfrom
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
*/
|
||||
@@ -208,9 +208,9 @@ glm_rotated(mat4 m, float angle, vec3 axis) {
|
||||
* @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
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] pivot rotation center
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
@@ -230,9 +230,9 @@ glm_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||
/*!
|
||||
* @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
|
||||
* this is POST transform, applies to existing transform as last transform
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
*/
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
* @brief translate existing transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -66,7 +66,7 @@ glm_translate(mat4 m, vec3 v) {
|
||||
*
|
||||
* source matrix will remain same
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
* @param[out] dest translated matrix
|
||||
*/
|
||||
@@ -80,7 +80,7 @@ glm_translate_to(mat4 m, vec3 v, mat4 dest) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by x factor
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] x x factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -98,7 +98,7 @@ glm_translate_x(mat4 m, float x) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by y factor
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] y y factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -116,7 +116,7 @@ glm_translate_y(mat4 m, float y) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by z factor
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] z z factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -135,7 +135,7 @@ glm_translate_z(mat4 m, float z) {
|
||||
* @brief rotate existing transform matrix around X axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest rotated matrix
|
||||
*/
|
||||
@@ -160,7 +160,7 @@ glm_rotate_x(mat4 m, float angle, mat4 dest) {
|
||||
* @brief rotate existing transform matrix around Y axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest rotated matrix
|
||||
*/
|
||||
@@ -185,7 +185,7 @@ glm_rotate_y(mat4 m, float angle, mat4 dest) {
|
||||
* @brief rotate existing transform matrix around Z axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest rotated matrix
|
||||
*/
|
||||
@@ -207,9 +207,27 @@ glm_rotate_z(mat4 m, float angle, mat4 dest) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle
|
||||
* @brief rotate existing transform matrix
|
||||
* around given axis by angle at ORIGIN (0,0,0)
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* **❗️IMPORTANT ❗️**
|
||||
*
|
||||
* If you need to rotate object around itself e.g. center of object or at
|
||||
* some point [of object] then `glm_rotate_at()` would be better choice to do so.
|
||||
*
|
||||
* Even if object's model transform is identiy, rotation may not be around
|
||||
* center of object if object does not lay out at ORIGIN perfectly.
|
||||
*
|
||||
* Using `glm_rotate_at()` with center of bounding shape ( AABB, Sphere ... )
|
||||
* would be an easy option to rotate around object if object is not at origin.
|
||||
*
|
||||
* One another option to rotate around itself at any point is `glm_spin()`
|
||||
* which is perfect if only rotating around model position is desired e.g. not
|
||||
* specific point on model for instance center of geometry or center of mass,
|
||||
* again if geometry is not perfectly centered at origin at identity transform,
|
||||
* rotation may not be around geometry.
|
||||
*
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
*/
|
||||
@@ -225,7 +243,7 @@ glm_rotate(mat4 m, float angle, vec3 axis) {
|
||||
* @brief rotate existing transform
|
||||
* around given axis by angle at given pivot point (rotation center)
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] pivot rotation center
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
@@ -250,7 +268,7 @@ glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||
* this should work faster than glm_rotate_at because it reduces
|
||||
* one glm_translate.
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] pivot rotation center
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
@@ -268,9 +286,10 @@ glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||
* @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, out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
*/
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
/*!
|
||||
* @brief creates NEW translate transform matrix by v vector
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -58,7 +58,7 @@ glm_translate_make(mat4 m, vec3 v) {
|
||||
* @brief scale existing transform matrix by v vector
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v scale vector [x, y, z]
|
||||
* @param[out] dest scaled matrix
|
||||
*/
|
||||
@@ -75,7 +75,7 @@ glm_scale_to(mat4 m, vec3 v, mat4 dest) {
|
||||
/*!
|
||||
* @brief creates NEW scale matrix by v vector
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] v scale vector [x, y, z]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -91,7 +91,7 @@ glm_scale_make(mat4 m, vec3 v) {
|
||||
* @brief scales existing transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] v scale vector [x, y, z]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -104,7 +104,7 @@ glm_scale(mat4 m, vec3 v) {
|
||||
* @brief applies uniform scale to existing transform matrix v = [s, s, s]
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] s scale factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -119,7 +119,7 @@ glm_scale_uni(mat4 m, float s) {
|
||||
*
|
||||
* axis will be normalized so you don't need to normalize it
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
*/
|
||||
@@ -220,7 +220,7 @@ glm_decompose_rs(mat4 m, mat4 r, vec3 s) {
|
||||
* @brief decompose affine transform, TODO: extract shear factors.
|
||||
* DON'T pass projected matrix here
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[out] t translation vector
|
||||
* @param[out] r rotation matrix (mat4)
|
||||
* @param[out] s scaling vector [X, Y, Z]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
* @brief translate existing 2d transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] v translate vector [x, y]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -50,7 +50,7 @@ glm_translate2d(mat3 m, vec2 v) {
|
||||
*
|
||||
* source matrix will remain same
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v translate vector [x, y]
|
||||
* @param[out] dest translated matrix
|
||||
*/
|
||||
@@ -64,7 +64,7 @@ glm_translate2d_to(mat3 m, vec2 v, mat3 dest) {
|
||||
/*!
|
||||
* @brief translate existing 2d transform matrix by x factor
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] x x factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -78,7 +78,7 @@ glm_translate2d_x(mat3 m, float x) {
|
||||
/*!
|
||||
* @brief translate existing 2d transform matrix by y factor
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] y y factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -92,7 +92,7 @@ glm_translate2d_y(mat3 m, float y) {
|
||||
/*!
|
||||
* @brief creates NEW translate 2d transform matrix by v vector
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] v translate vector [x, y]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -107,7 +107,7 @@ glm_translate2d_make(mat3 m, vec2 v) {
|
||||
* @brief scale existing 2d transform matrix by v vector
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v scale vector [x, y]
|
||||
* @param[out] dest scaled matrix
|
||||
*/
|
||||
@@ -130,7 +130,7 @@ glm_scale2d_to(mat3 m, vec2 v, mat3 dest) {
|
||||
/*!
|
||||
* @brief creates NEW 2d scale matrix by v vector
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] v scale vector [x, y]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -145,7 +145,7 @@ glm_scale2d_make(mat3 m, vec2 v) {
|
||||
* @brief scales existing 2d transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] v scale vector [x, y]
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -164,7 +164,7 @@ glm_scale2d(mat3 m, vec2 v) {
|
||||
* @brief applies uniform scale to existing 2d transform matrix v = [s, s]
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] s scale factor
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -182,7 +182,7 @@ glm_scale2d_uni(mat3 m, float s) {
|
||||
/*!
|
||||
* @brief creates NEW rotation matrix by angle around Z axis
|
||||
*
|
||||
* @param[out] m affine transfrom
|
||||
* @param[out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -210,7 +210,7 @@ glm_rotate2d_make(mat3 m, float angle) {
|
||||
* @brief rotate existing 2d transform matrix around Z axis by angle
|
||||
* and store result in same matrix
|
||||
*
|
||||
* @param[in, out] m affine transfrom
|
||||
* @param[in, out] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
@@ -237,7 +237,7 @@ glm_rotate2d(mat3 m, float angle) {
|
||||
* @brief rotate existing 2d transform matrix around Z axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[out] dest destination
|
||||
*/
|
||||
|
||||
@@ -104,7 +104,7 @@ glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) {
|
||||
*
|
||||
* @param[in] box bounding box
|
||||
* @param[in] cropBox crop box
|
||||
* @param[in] clampBox miniumum box
|
||||
* @param[in] clampBox minimum box
|
||||
* @param[out] dest cropped bounding box
|
||||
*/
|
||||
CGLM_INLINE
|
||||
|
||||
@@ -13,6 +13,13 @@ extern "C" {
|
||||
|
||||
#include "../cglm.h"
|
||||
|
||||
/* DEPRECATED! use _diag */
|
||||
#define glmc_aabb2d_size(aabb) glmc_aabb2d_diag(aabb)
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_aabb2d_zero(vec2 aabb[2]);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_aabb2d_copy(vec2 aabb[2], vec2 dest[2]);
|
||||
@@ -46,7 +53,11 @@ glmc_aabb2d_isvalid(vec2 aabb[2]);
|
||||
|
||||
CGLM_EXPORT
|
||||
float
|
||||
glmc_aabb2d_size(vec2 aabb[2]);
|
||||
glmc_aabb2d_diag(vec2 aabb[2]);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_aabb2d_sizev(vec2 aabb[2], vec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
float
|
||||
|
||||
@@ -29,6 +29,14 @@ CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_one(ivec2 v);
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec2_dot(ivec2 a, ivec2 b);
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec2_cross(ivec2 a, ivec2 b);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_add(ivec2 a, ivec2 b, ivec2 dest);
|
||||
@@ -53,6 +61,18 @@ CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_scale(ivec2 v, int s, ivec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_div(ivec2 a, ivec2 b, ivec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_divs(ivec2 v, int s, ivec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest);
|
||||
|
||||
@@ -29,6 +29,18 @@ CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_one(ivec3 v);
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec3_dot(ivec3 a, ivec3 b);
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec3_norm2(ivec3 v);
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec3_norm(ivec3 v);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_add(ivec3 a, ivec3 b, ivec3 dest);
|
||||
@@ -53,6 +65,18 @@ CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_scale(ivec3 v, int s, ivec3 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_div(ivec3 a, ivec3 b, ivec3 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_divs(ivec3 v, int s, ivec3 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest);
|
||||
|
||||
@@ -474,7 +474,7 @@ glm_persp_decomp_x(mat4 proj,
|
||||
|
||||
/*!
|
||||
* @brief decomposes top and bottom values of perspective projection.
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -266,7 +266,7 @@ glm_persp_decomp_x_lh_no(mat4 proj,
|
||||
* @brief decomposes top and bottom values of perspective projection
|
||||
* with a left-hand coordinate system and a
|
||||
* clip-space of [-1, 1].
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -266,7 +266,7 @@ glm_persp_decomp_x_rh_no(mat4 proj,
|
||||
* @brief decomposes top and bottom values of perspective projection
|
||||
* with a right-hand coordinate system and a
|
||||
* clip-space of [-1, 1].
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -235,7 +235,7 @@ glm_ease_back_inout(float t) {
|
||||
|
||||
o = 1.70158f;
|
||||
s = o * 1.525f;
|
||||
x = 0.5;
|
||||
x = 0.5f;
|
||||
n = t / 0.5f;
|
||||
|
||||
if (n < 1.0f) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
NOTE:
|
||||
angles must be passed as [X-Angle, Y-Angle, Z-angle] order
|
||||
For instance you don't pass angles as [Z-Angle, X-Angle, Y-angle] to
|
||||
glm_euler_zxy funciton, All RELATED functions accept angles same order
|
||||
glm_euler_zxy function, All RELATED functions accept angles same order
|
||||
which is [X, Y, Z].
|
||||
*/
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
#ifndef cglm_io_h
|
||||
#define cglm_io_h
|
||||
#if defined(DEBUG) || defined(_DEBUG) \
|
||||
#if !defined(NDEBUG) \
|
||||
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC) \
|
||||
|| defined(CGLM_NO_PRINTS_NOOP)
|
||||
|
||||
|
||||
@@ -17,12 +17,17 @@
|
||||
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 int glm_ivec2_dot(ivec2 a, ivec2 b)
|
||||
CGLM_INLINE int glm_ivec2_cross(ivec2 a, ivec2 b)
|
||||
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 void glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest)
|
||||
CGLM_INLINE void glm_ivec2_divs(ivec2 v, int s, ivec2 dest)
|
||||
CGLM_INLINE void glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest)
|
||||
CGLM_INLINE void glm_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||
CGLM_INLINE void glm_ivec2_addadds(ivec2 a, int s, ivec2 dest)
|
||||
CGLM_INLINE void glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||
@@ -110,6 +115,36 @@ glm_ivec2_one(ivec2 v) {
|
||||
v[0] = v[1] = 1;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief ivec2 dot product
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
*
|
||||
* @return dot product
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glm_ivec2_dot(ivec2 a, ivec2 b) {
|
||||
return a[0] * b[0] + a[1] * b[1];
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief ivec2 cross product
|
||||
*
|
||||
* REF: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
*
|
||||
* @return Z component of cross product
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glm_ivec2_cross(ivec2 a, ivec2 b) {
|
||||
return a[0] * b[1] - a[1] * b[0];
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||
*
|
||||
@@ -169,7 +204,7 @@ glm_ivec2_subs(ivec2 v, int s, ivec2 dest) {
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a frist vector
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[out] dest destination
|
||||
*/
|
||||
@@ -194,6 +229,48 @@ glm_ivec2_scale(ivec2 v, int s, ivec2 dest) {
|
||||
dest[1] = v[1] * s;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with another component-wise division: d = a / b
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @param[out] dest result = (a[0]/b[0], a[1]/b[1])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest) {
|
||||
dest[0] = a[0] / b[0];
|
||||
dest[1] = a[1] / b[1];
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with scalar: d = v / s
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @param[out] dest result = (a[0]/s, a[1]/s)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ivec2_divs(ivec2 v, int s, ivec2 dest) {
|
||||
dest[0] = v[0] / s;
|
||||
dest[1] = v[1] / s;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief mod vector with another component-wise modulo: d = a % b
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @param[out] dest result = (a[0]%b[0], a[1]%b[1])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest) {
|
||||
dest[0] = a[0] % b[0];
|
||||
dest[1] = a[1] % b[1];
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||
*
|
||||
|
||||
@@ -17,12 +17,18 @@
|
||||
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 int glm_ivec3_dot(ivec3 a, ivec3 b)
|
||||
CGLM_INLINE int glm_ivec3_norm2(ivec3 v)
|
||||
CGLM_INLINE int glm_ivec3_norm(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 void glm_ivec3_div(ivec3 a, ivec3 b, ivec3 dest)
|
||||
CGLM_INLINE void glm_ivec3_divs(ivec3 v, int s, ivec3 dest)
|
||||
CGLM_INLINE void glm_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest)
|
||||
CGLM_INLINE void glm_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||
CGLM_INLINE void glm_ivec3_addadds(ivec3 a, int s, ivec3 dest)
|
||||
CGLM_INLINE void glm_ivec3_subadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||
@@ -112,6 +118,51 @@ glm_ivec3_one(ivec3 v) {
|
||||
v[0] = v[1] = v[2] = 1;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief ivec3 dot product
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
*
|
||||
* @return dot product
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glm_ivec3_dot(ivec3 a, ivec3 b) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vector
|
||||
*
|
||||
* @return norm * norm
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glm_ivec3_norm2(ivec3 v) {
|
||||
return glm_ivec3_dot(v, v);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief euclidean norm (magnitude), also called L2 norm
|
||||
* this will give magnitude of vector in euclidean space
|
||||
*
|
||||
* @param[in] v vector
|
||||
*
|
||||
* @return norm
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glm_ivec3_norm(ivec3 v) {
|
||||
return (int)sqrtf((float)glm_ivec3_norm2(v));
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||
*
|
||||
@@ -175,7 +226,7 @@ glm_ivec3_subs(ivec3 v, int s, ivec3 dest) {
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a frist vector
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[out] dest destination
|
||||
*/
|
||||
@@ -202,6 +253,53 @@ glm_ivec3_scale(ivec3 v, int s, ivec3 dest) {
|
||||
dest[2] = v[2] * s;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with another component-wise division: d = a / b
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @param[out] dest result = (a[0]/b[0], a[1]/b[1], a[2]/b[2])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ivec3_div(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 div vector with scalar: d = v / s
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @param[out] dest result = (a[0]/s, a[1]/s, a[2]/s)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ivec3_divs(ivec3 v, int s, ivec3 dest) {
|
||||
dest[0] = v[0] / s;
|
||||
dest[1] = v[1] / s;
|
||||
dest[2] = v[2] / s;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief Element-wise modulo operation on ivec3 vectors: dest = a % b
|
||||
*
|
||||
* Performs element-wise modulo on each component of vectors `a` and `b`.
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @param[out] dest result = (a[0]%b[0], a[1]%b[1], a[2]%b[2])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ivec3_mod(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 vector [a] with vector [b] and add result to vector [dest]
|
||||
*
|
||||
|
||||
@@ -179,7 +179,7 @@ glm_ivec4_subs(ivec4 v, int s, ivec4 dest) {
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a frist vector
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[out] dest destination
|
||||
*/
|
||||
|
||||
@@ -180,7 +180,7 @@ glm_mat2_transpose_to(mat2 m, mat2 dest) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief tranpose mat2 and store result in same matrix
|
||||
* @brief transpose mat2 and store result in same matrix
|
||||
*
|
||||
* @param[in, out] m source and dest
|
||||
*/
|
||||
|
||||
@@ -201,7 +201,7 @@ glm_mat3_transpose_to(mat3 m, mat3 dest) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief tranpose mat3 and store result in same matrix
|
||||
* @brief transpose mat3 and store result in same matrix
|
||||
*
|
||||
* @param[in, out] m source and dest
|
||||
*/
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
# include "simd/wasm/mat4.h"
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifndef NDEBUG
|
||||
# include <assert.h>
|
||||
#endif
|
||||
|
||||
@@ -376,7 +376,7 @@ void
|
||||
glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) {
|
||||
uint32_t i;
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifndef NDEBUG
|
||||
assert(len > 1 && "there must be least 2 matrices to go!");
|
||||
#endif
|
||||
|
||||
@@ -537,7 +537,7 @@ glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief tranpose mat4 and store result in same matrix
|
||||
* @brief transpose mat4 and store result in same matrix
|
||||
*
|
||||
* @param[in, out] m source and dest
|
||||
*/
|
||||
|
||||
@@ -703,7 +703,7 @@ glm_quat_nlerp(versor from, versor to, float t, versor dest) {
|
||||
*
|
||||
* @param[in] from from
|
||||
* @param[in] to to
|
||||
* @param[in] t amout
|
||||
* @param[in] t amount
|
||||
* @param[out] dest result quaternion
|
||||
*/
|
||||
CGLM_INLINE
|
||||
|
||||
@@ -16,6 +16,9 @@ extern "C" {
|
||||
#include "struct/vec2.h"
|
||||
#include "struct/vec3.h"
|
||||
#include "struct/vec4.h"
|
||||
#include "struct/ivec2.h"
|
||||
#include "struct/ivec3.h"
|
||||
#include "struct/ivec4.h"
|
||||
#include "struct/mat2.h"
|
||||
#include "struct/mat2x3.h"
|
||||
#include "struct/mat2x4.h"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include "mat4.h"
|
||||
|
||||
/* api definition */
|
||||
#define glms_aabb2d_(NAME) CGLM_STRUCTAPI(aabb, NAME)
|
||||
#define glms_aabb2d_(NAME) CGLM_STRUCTAPI(aabb2d, NAME)
|
||||
|
||||
/*!
|
||||
* @brief apply transform to Axis-Aligned Bounding Box
|
||||
@@ -92,7 +92,7 @@ glms_aabb2d_(crop)(vec2s aabb[2], vec2s cropAabb[2], vec2s dest[2]) {
|
||||
*
|
||||
* @param[in] aabb bounding box
|
||||
* @param[in] cropAabb crop box
|
||||
* @param[in] clampAabb miniumum box
|
||||
* @param[in] clampAabb minimum box
|
||||
* @param[out] dest cropped bounding box
|
||||
*/
|
||||
CGLM_INLINE
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
* @brief translate existing transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -47,9 +47,9 @@ glms_translated(mat4s m, vec3s v) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by x factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] x x factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -61,9 +61,9 @@ glms_translated_x(mat4s m, float x) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by y factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] y y factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -75,9 +75,9 @@ glms_translated_y(mat4s m, float y) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by z factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] z z factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -90,7 +90,7 @@ glms_translated_z(mat4s m, float z) {
|
||||
* @brief rotate existing transform matrix around X axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns rotated matrix
|
||||
*/
|
||||
@@ -106,7 +106,7 @@ glms_rotated_x(mat4s m, float angle) {
|
||||
* @brief rotate existing transform matrix around Y axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns rotated matrix
|
||||
*/
|
||||
@@ -122,7 +122,7 @@ glms_rotated_y(mat4s m, float angle) {
|
||||
* @brief rotate existing transform matrix around Z axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns rotated matrix
|
||||
*/
|
||||
@@ -137,10 +137,10 @@ glms_rotated_z(mat4s m, float angle) {
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -153,11 +153,11 @@ glms_rotated(mat4s m, float angle, vec3s axis) {
|
||||
* @brief rotate existing transform
|
||||
* around given axis by angle at given pivot point (rotation center)
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] pivot rotation center
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -169,10 +169,10 @@ glms_rotated_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
* @brief translate existing transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -47,9 +47,9 @@ glms_translate(mat4s m, vec3s v) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by x factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] x x factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -61,9 +61,9 @@ glms_translate_x(mat4s m, float x) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by y factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] y y factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -75,9 +75,9 @@ glms_translate_y(mat4s m, float y) {
|
||||
/*!
|
||||
* @brief translate existing transform matrix by z factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] z z factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -90,7 +90,7 @@ glms_translate_z(mat4s m, float z) {
|
||||
* @brief rotate existing transform matrix around X axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns rotated matrix
|
||||
*/
|
||||
@@ -106,7 +106,7 @@ glms_rotate_x(mat4s m, float angle) {
|
||||
* @brief rotate existing transform matrix around Y axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns rotated matrix
|
||||
*/
|
||||
@@ -122,7 +122,7 @@ glms_rotate_y(mat4s m, float angle) {
|
||||
* @brief rotate existing transform matrix around Z axis by angle
|
||||
* and store result in dest
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns rotated matrix
|
||||
*/
|
||||
@@ -137,10 +137,10 @@ glms_rotate_z(mat4s m, float angle) {
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -153,11 +153,11 @@ glms_rotate(mat4s m, float angle, vec3s axis) {
|
||||
* @brief rotate existing transform
|
||||
* around given axis by angle at given pivot point (rotation center)
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] pivot rotation center
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -169,10 +169,10 @@ glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
||||
/*!
|
||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
* @brief creates NEW translate transform matrix by v vector
|
||||
*
|
||||
* @param[in] v translate vector [x, y, z]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -59,7 +59,7 @@ glms_translate_make(vec3s v) {
|
||||
* @brief creates NEW scale matrix by v vector
|
||||
*
|
||||
* @param[in] v scale vector [x, y, z]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -73,9 +73,9 @@ glms_scale_make(vec3s v) {
|
||||
* @brief scales existing transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v scale vector [x, y, z]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -89,9 +89,9 @@ glms_scale(mat4s m, vec3s v) {
|
||||
* @brief applies uniform scale to existing transform matrix v = [s, s, s]
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] s scale factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -107,7 +107,7 @@ glms_scale_uni(mat4s m, float s) {
|
||||
*
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -128,7 +128,7 @@ glms_rotate_make(float angle, vec3s axis) {
|
||||
* @param[in] pivot rotation center
|
||||
* @param[in] angle angle (radians)
|
||||
* @param[in] axis axis
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -184,7 +184,7 @@ glms_decompose_rs(mat4s m, mat4s * __restrict r, vec3s * __restrict s) {
|
||||
* @brief decompose affine transform, TODO: extract shear factors.
|
||||
* DON'T pass projected matrix here
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[out] t translation vector
|
||||
* @param[out] r rotation matrix (mat4)
|
||||
* @param[out] s scaling vector [X, Y, Z]
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
* @brief translate existing 2d transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v translate vector [x, y]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -46,9 +46,9 @@ glms_translate2d(mat3s m, vec2s v) {
|
||||
/*!
|
||||
* @brief translate existing 2d transform matrix by x factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] x x factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -60,9 +60,9 @@ glms_translate2d_x(mat3s m, float x) {
|
||||
/*!
|
||||
* @brief translate existing 2d transform matrix by y factor
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] y y factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -75,7 +75,7 @@ glms_translate2d_y(mat3s m, float y) {
|
||||
* @brief creates NEW translate 2d transform matrix by v vector
|
||||
*
|
||||
* @param[in] v translate vector [x, y]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -89,7 +89,7 @@ glms_translate2d_make(vec2s v) {
|
||||
* @brief creates NEW 2d scale matrix by v vector
|
||||
*
|
||||
* @param[in] v scale vector [x, y]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -103,9 +103,9 @@ glms_scale2d_make(vec2s v) {
|
||||
* @brief scales existing 2d transform matrix by v vector
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] v scale vector [x, y, z]
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -119,9 +119,9 @@ glms_scale2d(mat3s m, vec2s v) {
|
||||
* @brief applies uniform scale to existing 2d transform matrix v = [s, s, s]
|
||||
* and stores result in same matrix
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] s scale factor
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -136,7 +136,7 @@ glms_scale2d_uni(mat3s m, float s) {
|
||||
* axis will be normalized so you don't need to normalize it
|
||||
*
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -149,9 +149,9 @@ glms_rotate2d_make(float angle) {
|
||||
/*!
|
||||
* @brief rotate existing 2d transform matrix around given axis by angle
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
@@ -163,9 +163,9 @@ glms_rotate2d(mat3s m, float angle) {
|
||||
/*!
|
||||
* @brief rotate existing 2d transform matrix around given axis by angle
|
||||
*
|
||||
* @param[in] m affine transfrom
|
||||
* @param[in] m affine transform
|
||||
* @param[in] angle angle (radians)
|
||||
* @returns affine transfrom
|
||||
* @returns affine transform
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat3s
|
||||
|
||||
@@ -92,7 +92,7 @@ glms_aabb_(crop)(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) {
|
||||
*
|
||||
* @param[in] box bounding box
|
||||
* @param[in] cropBox crop box
|
||||
* @param[in] clampBox miniumum box
|
||||
* @param[in] clampBox minimum box
|
||||
* @param[out] dest cropped bounding box
|
||||
*/
|
||||
CGLM_INLINE
|
||||
|
||||
@@ -495,7 +495,7 @@ glms_persp_decomp_x(mat4s proj,
|
||||
|
||||
/*!
|
||||
* @brief decomposes top and bottom values of perspective projection.
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -203,7 +203,7 @@ glms_persp_decomp_x_lh_no(mat4s proj,
|
||||
* @brief decomposes top and bottom values of perspective projection
|
||||
* with a left-hand coordinate system and a
|
||||
* clip-space of [-1, 1].
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -203,7 +203,7 @@ glms_persp_decomp_x_lh_zo(mat4s proj,
|
||||
* @brief decomposes top and bottom values of perspective projection
|
||||
* with a left-hand coordinate system and a
|
||||
* clip-space of [0, 1].
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -203,7 +203,7 @@ glms_persp_decomp_x_rh_no(mat4s proj,
|
||||
* @brief decomposes top and bottom values of perspective projection
|
||||
* with a right-hand coordinate system and a
|
||||
* clip-space of [-1, 1].
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -203,7 +203,7 @@ glms_persp_decomp_x_rh_zo(mat4s proj,
|
||||
* @brief decomposes top and bottom values of perspective projection
|
||||
* with a right-hand coordinate system and a
|
||||
* clip-space of [0, 1].
|
||||
* y stands for y axis (top / botom axis)
|
||||
* y stands for y axis (top / bottom axis)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] top top
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
NOTE:
|
||||
angles must be passed as [X-Angle, Y-Angle, Z-angle] order
|
||||
For instance you don't pass angles as [Z-Angle, X-Angle, Y-angle] to
|
||||
glm_euler_zxy funciton, All RELATED functions accept angles same order
|
||||
glm_euler_zxy function, All RELATED functions accept angles same order
|
||||
which is [X, Y, Z].
|
||||
*/
|
||||
|
||||
|
||||
@@ -7,14 +7,16 @@
|
||||
|
||||
/*
|
||||
Functions:
|
||||
CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *ostream);
|
||||
CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *ostream);
|
||||
CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *ostream);
|
||||
CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *ostream);
|
||||
CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream);
|
||||
CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream);
|
||||
|
||||
CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_mat4_print(mat4s matrix, FILE *ostream);
|
||||
CGLM_INLINE void glms_mat3_print(mat3s matrix, FILE *ostream);
|
||||
CGLM_INLINE void glms_vec4_print(vec4s vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_ivec4_print(ivec3s vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_vec3_print(vec3s vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_ivec3_print(ivec3s vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_vec2_print(vec2s vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_ivec2_print(ivec3s vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_versor_print(versor vec, FILE *ostream);
|
||||
CGLM_INLINE void glms_aabb_print(vec3s bbox[2], const char *tag, FILE *ostream);
|
||||
*/
|
||||
|
||||
#ifndef cglms_ios_h
|
||||
@@ -49,6 +51,13 @@ glms_vec4_print(vec4s vec,
|
||||
glm_vec4_print(vec.raw, ostream);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec4_print(ivec4s vec,
|
||||
FILE * __restrict ostream) {
|
||||
glm_ivec4_print(vec.raw, ostream);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_vec3_print(vec3s vec,
|
||||
@@ -63,6 +72,20 @@ glms_ivec3_print(ivec3s vec,
|
||||
glm_ivec3_print(vec.raw, ostream);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_vec2_print(vec2s vec,
|
||||
FILE * __restrict ostream) {
|
||||
glm_vec2_print(vec.raw, ostream);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec2_print(ivec2s vec,
|
||||
FILE * __restrict ostream) {
|
||||
glm_ivec2_print(vec.raw, ostream);
|
||||
}
|
||||
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_versor_print(versors vec,
|
||||
|
||||
708
include/cglm/struct/ivec2.h
Normal file
708
include/cglm/struct/ivec2.h
Normal file
@@ -0,0 +1,708 @@
|
||||
/*
|
||||
* Copyright (c), Recep Aslantas.
|
||||
*
|
||||
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||
* Full license can be found in the LICENSE file
|
||||
*/
|
||||
|
||||
/*
|
||||
Macros:
|
||||
GLMS_IVEC2_ONE_INIT
|
||||
GLMS_IVEC2_ZERO_INIT
|
||||
GLMS_IVEC2_ONE
|
||||
GLMS_IVEC2_ZERO
|
||||
|
||||
Functions:
|
||||
CGLM_INLINE ivec2s glms_ivec2(int * __restrict v)
|
||||
CGLM_INLINE void glms_ivec2_pack(ivec2s dst[], ivec2s src[], size_t len)
|
||||
CGLM_INLINE void glms_ivec2_unpack(ivec2 dst[], ivec2 src[], size_t len)
|
||||
CGLM_INLINE ivec2s glms_ivec2_zero(ivec2s v)
|
||||
CGLM_INLINE ivec2s glms_ivec2_one(ivec2s v)
|
||||
CGLM_INLINE int glms_ivec2_dot(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE int glms_ivec2_cross(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_add(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_adds(ivec2s v, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_sub(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_subs(ivec2s v, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_mul(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_scale(ivec2s v, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_div(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_divs(ivec2s v, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_mod(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_addadd(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_addadds(ivec2s a, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_subadd(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_subadds(ivec2s a, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_muladd(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_muladds(ivec2s a, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_maxadd(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_minadd(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_subsub(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_subsubs(ivec2s a, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_addsub(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_addsubs(ivec2s a, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_mulsub(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_mulsubs(ivec2s a, int s)
|
||||
CGLM_INLINE ivec2s glms_ivec2_maxsub(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_minsub(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE int glms_ivec2_distance2(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE float glms_ivec2_distance(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_fill(int val)
|
||||
CGLM_INLINE bool glms_ivec2_eq(ivec2s v, int val);
|
||||
CGLM_INLINE bool glms_ivec2_eqv(ivec2s a, ivec2s b);
|
||||
CGLM_INLINE ivec2s glms_ivec2_maxv(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_minv(ivec2s a, ivec2s b)
|
||||
CGLM_INLINE ivec2s glms_ivec2_clamp(ivec2s v, int minVal, int maxVal)
|
||||
CGLM_INLINE ivec2s glms_ivec2_abs(ivec2s v)
|
||||
*/
|
||||
|
||||
#ifndef cglms_ivec2_h
|
||||
#define cglms_ivec2_h
|
||||
|
||||
#include "../common.h"
|
||||
#include "../types-struct.h"
|
||||
#include "../ivec2.h"
|
||||
|
||||
#define glms_ivec2_(NAME) CGLM_STRUCTAPI(ivec2, NAME)
|
||||
|
||||
#define GLMS_IVEC2_ONE_INIT {GLM_IVEC2_ONE_INIT}
|
||||
#define GLMS_IVEC2_ZERO_INIT {GLM_IVEC2_ZERO_INIT}
|
||||
|
||||
#define GLMS_IVEC2_ONE ((ivec2s)GLMS_IVEC2_ONE_INIT)
|
||||
#define GLMS_IVEC2_ZERO ((ivec2s)GLMS_IVEC2_ZERO_INIT)
|
||||
|
||||
/*!
|
||||
* @brief init ivec2 using ivec3 or ivec4
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2(int * __restrict v) {
|
||||
ivec2s r;
|
||||
glm_ivec2(v, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief pack an array of ivec2 into an array of ivec2s
|
||||
*
|
||||
* @param[out] dst array of ivec2s
|
||||
* @param[in] src array of ivec2
|
||||
* @param[in] len number of elements
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec2_(pack)(ivec2s dst[], ivec2 src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
glm_ivec2_copy(src[i], dst[i].raw);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief unpack an array of ivec2s into an array of ivec2
|
||||
*
|
||||
* @param[out] dst array of ivec2
|
||||
* @param[in] src array of ivec2s
|
||||
* @param[in] len number of elements
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec2_(unpack)(ivec2 dst[], ivec2s src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
glm_ivec2_copy(src[i].raw, dst[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set all members of [v] to zero
|
||||
*
|
||||
* @returns vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(zero)(void) {
|
||||
ivec2s r;
|
||||
glm_ivec2_zero(r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set all members of [v] to one
|
||||
*
|
||||
* @returns vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(one)(void) {
|
||||
ivec2s r;
|
||||
glm_ivec2_one(r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief ivec2 dot product
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
*
|
||||
* @return dot product
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glms_ivec2_(dot)(ivec2s a, ivec2s b) {
|
||||
return glm_ivec2_dot(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief ivec2 cross product
|
||||
*
|
||||
* REF: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
*
|
||||
* @return Z component of cross product
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glms_ivec2_(cross)(ivec2s a, ivec2s b) {
|
||||
return glm_ivec2_cross(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(add)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_add(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar s to vector [v] and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(adds)(ivec2s v, int s) {
|
||||
ivec2s r;
|
||||
glm_ivec2_adds(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [b] from vector [a] and store result in [dest]
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(sub)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_sub(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar s from vector [v] and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(subs)(ivec2s v, int s) {
|
||||
ivec2s r;
|
||||
glm_ivec2_subs(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a frist vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(mul)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_mul(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar s and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(scale)(ivec2s v, int s) {
|
||||
ivec2s r;
|
||||
glm_ivec2_scale(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with another component-wise division: d = a / b
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @returns result = (a[0]/b[0], a[1]/b[1])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(div)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_div(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with scalar: d = v / s
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns result = (a[0]/s, a[1]/s)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(divs)(ivec2s v, int s) {
|
||||
ivec2s r;
|
||||
glm_ivec2_divs(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief mod vector with another component-wise modulo: d = a % b
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @returns result = (a[0]%b[0], a[1]%b[1])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(mod)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_mod(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(addadd)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_addadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar [s] onto vector [a] and add result to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a + s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(addadds)(ivec2s a, int s, ivec2s dest) {
|
||||
glm_ivec2_addadds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [a] from vector [b] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a - b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(subadd)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_subadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar [s] from vector [a] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a - s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(subadds)(ivec2s a, int s, ivec2s dest) {
|
||||
glm_ivec2_subadds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a * b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(muladd)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_muladd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar [s] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a * s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(muladds)(ivec2s a, int s, ivec2s dest) {
|
||||
glm_ivec2_muladds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add maximum of vector [a] and vector [b] to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += max(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(maxadd)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_maxadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add minimum of vector [a] and vector [b] to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += min(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(minadd)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_minadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [a] from vector [b] and subtract result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= (a - b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(subsub)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_subsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar [s] from vector [a] and subtract result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a - s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(subsubs)(ivec2s a, int s, ivec2s dest) {
|
||||
glm_ivec2_subsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b scalar
|
||||
* @param[in] dest dest -= (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(addsub)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_addsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar [s] to vector [a] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(addsubs)(ivec2s a, int s, ivec2s dest) {
|
||||
glm_ivec2_addsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] and vector [b] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b scalar
|
||||
* @param[in] dest dest -= (a * b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(mulsub)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_mulsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a * s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(mulsubs)(ivec2s a, int s, ivec2s dest) {
|
||||
glm_ivec2_mulsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract maximum of vector [a] and vector [b] from vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= max(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(maxsub)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_maxsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract minimum of vector [a] and vector [b] from vector [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= min(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(minsub)(ivec2s a, ivec2s b, ivec2s dest) {
|
||||
glm_ivec2_minsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @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
|
||||
glms_ivec2_(distance2)(ivec2s a, ivec2s b) {
|
||||
return glm_ivec2_distance2(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief distance between two vectors
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @return returns distance
|
||||
*/
|
||||
CGLM_INLINE
|
||||
float
|
||||
glms_ivec2_(distance)(ivec2s a, ivec2s b) {
|
||||
return glm_ivec2_distance(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief fill a vector with specified value
|
||||
*
|
||||
* @param[in] val value
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(fill)(int val) {
|
||||
ivec2s r;
|
||||
glm_ivec2_fill(r.raw, val);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief check if vector is equal to value
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] val value
|
||||
*/
|
||||
CGLM_INLINE
|
||||
bool
|
||||
glms_ivec2_(eq)(ivec2s v, int val) {
|
||||
return glm_ivec2_eq(v.raw, val);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief check if vector is equal to another
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
bool
|
||||
glms_ivec2_(eqv)(ivec2s a, ivec2s b) {
|
||||
return glm_ivec2_eqv(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set each member of dest to greater of vector a and b
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(maxv)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_maxv(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set each member of dest to lesser of vector a and b
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(minv)(ivec2s a, ivec2s b) {
|
||||
ivec2s r;
|
||||
glm_ivec2_minv(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief clamp each member of [v] between minVal and maxVal (inclusive)
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] minVal minimum value
|
||||
* @param[in] maxVal maximum value
|
||||
* @returns clamped vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(clamp)(ivec2s v, int minVal, int maxVal) {
|
||||
glm_ivec2_clamp(v.raw, minVal, maxVal);
|
||||
return v;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief absolute value of v
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec2s
|
||||
glms_ivec2_(abs)(ivec2s v) {
|
||||
ivec2s r;
|
||||
glm_ivec2_abs(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* cglms_ivec2_h */
|
||||
725
include/cglm/struct/ivec3.h
Normal file
725
include/cglm/struct/ivec3.h
Normal file
@@ -0,0 +1,725 @@
|
||||
/*
|
||||
* Copyright (c), Recep Aslantas.
|
||||
*
|
||||
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||
* Full license can be found in the LICENSE file
|
||||
*/
|
||||
|
||||
/*
|
||||
Macros:
|
||||
GLMS_IVEC3_ONE_INIT
|
||||
GLMS_IVEC3_ZERO_INIT
|
||||
GLMS_IVEC3_ONE
|
||||
GLMS_IVEC3_ZERO
|
||||
|
||||
Functions:
|
||||
CGLM_INLINE ivec3s glms_ivec3(ivec4s v4)
|
||||
CGLM_INLINE void glms_ivec3_pack(ivec3s dst[], ivec3 src[], size_t len)
|
||||
CGLM_INLINE void glms_ivec3_unpack(ivec3 dst[], ivec3s src[], size_t len)
|
||||
CGLM_INLINE ivec3s glms_ivec3_zero(void)
|
||||
CGLM_INLINE ivec3s glms_ivec3_one(void)
|
||||
CGLM_INLINE int glms_ivec3_dot(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE int glms_ivec3_norm2(ivec3s v)
|
||||
CGLM_INLINE int glms_ivec3_norm(ivec3s v)
|
||||
CGLM_INLINE ivec3s glms_ivec3_add(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_adds(ivec3s v, int s)
|
||||
CGLM_INLINE ivec3s glms_ivec3_sub(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_subs(ivec3s v, int s)
|
||||
CGLM_INLINE ivec3s glms_ivec3_mul(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_scale(ivec3s v, int s)
|
||||
CGLM_INLINE ivec3s glms_ivec3_div(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_divs(ivec3s v, int s)
|
||||
CGLM_INLINE ivec3s glms_ivec3_mod(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_addadd(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_addadds(ivec3s a, int s, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_subadd(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_subadds(ivec3s a, int s, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_muladd(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_muladds(ivec3s a, int s, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_minadd(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_subsub(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_subsubs(ivec3s a, int s, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_addsub(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_addsubs(ivec3s a, int s, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_mulsub(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_mulsubs(ivec3s a, int s, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_maxsub(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE ivec3s glms_ivec3_minsub(ivec3s a, ivec3s b, ivec3s dest)
|
||||
CGLM_INLINE int glms_ivec3_distance2(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE float glms_ivec3_distance(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_fill(int val)
|
||||
CGLM_INLINE bool glms_ivec3_eq(ivec3s v, int val)
|
||||
CGLM_INLINE bool glms_ivec3_eqv(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_maxv(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_minv(ivec3s a, ivec3s b)
|
||||
CGLM_INLINE ivec3s glms_ivec3_clamp(ivec3s v, int minVal, int maxVal)
|
||||
CGLM_INLINE ivec3s glms_ivec3_abs(ivec3s v)
|
||||
*/
|
||||
|
||||
#ifndef cglms_ivec3_h
|
||||
#define cglms_ivec3_h
|
||||
|
||||
#include "../common.h"
|
||||
#include "../types-struct.h"
|
||||
#include "../ivec3.h"
|
||||
|
||||
#define glms_ivec3_(NAME) CGLM_STRUCTAPI(ivec3, NAME)
|
||||
|
||||
#define GLMS_IVEC3_ONE_INIT {GLM_IVEC3_ONE_INIT}
|
||||
#define GLMS_IVEC3_ZERO_INIT {GLM_IVEC3_ZERO_INIT}
|
||||
|
||||
#define GLMS_IVEC3_ONE ((ivec3s)GLMS_IVEC3_ONE_INIT)
|
||||
#define GLMS_IVEC3_ZERO ((ivec3s)GLMS_IVEC3_ZERO_INIT)
|
||||
|
||||
/*!
|
||||
* @brief init ivec3 using ivec4
|
||||
*
|
||||
* @param[in] v4 vector4
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3(ivec4s v4) {
|
||||
ivec3s r;
|
||||
glm_ivec3(v4.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief pack an array of ivec3 into an array of ivec3s
|
||||
*
|
||||
* @param[out] dst array of ivec3s
|
||||
* @param[in] src array of ivec3
|
||||
* @param[in] len number of elements
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec3_(pack)(ivec3s dst[], ivec3 src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
glm_ivec3_copy(src[i], dst[i].raw);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief unpack an array of ivec3s into an array of ivec3
|
||||
*
|
||||
* @param[out] dst array of ivec3
|
||||
* @param[in] src array of ivec3s
|
||||
* @param[in] len number of elements
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec3_(unpack)(ivec3 dst[], ivec3s src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
glm_ivec3_copy(src[i].raw, dst[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set all members of [v] to zero
|
||||
*
|
||||
* @returns vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(zero)(void) {
|
||||
ivec3s r;
|
||||
glm_ivec3_zero(r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set all members of [v] to one
|
||||
*
|
||||
* @returns vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(one)(void) {
|
||||
ivec3s r;
|
||||
glm_ivec3_one(r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief ivec3 dot product
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
*
|
||||
* @return dot product
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glms_ivec3_(dot)(ivec3s a, ivec3s b) {
|
||||
return glm_ivec3_dot(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vector
|
||||
*
|
||||
* @return norm * norm
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glms_ivec3_(norm2)(ivec3s v) {
|
||||
return glm_ivec3_norm2(v.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief euclidean norm (magnitude), also called L2 norm
|
||||
* this will give magnitude of vector in euclidean space
|
||||
*
|
||||
* @param[in] v vector
|
||||
*
|
||||
* @return norm
|
||||
*/
|
||||
CGLM_INLINE
|
||||
int
|
||||
glms_ivec3_(norm)(ivec3s v) {
|
||||
return glm_ivec3_norm(v.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(add)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_add(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar s to vector [v] and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(adds)(ivec3s v, int s) {
|
||||
ivec3s r;
|
||||
glm_ivec3_adds(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [b] from vector [a] and store result in [dest]
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(sub)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_sub(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar s from vector [v] and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(subs)(ivec3s v, int s) {
|
||||
ivec3s r;
|
||||
glm_ivec3_subs(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a frist vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(mul)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_mul(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar s and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(scale)(ivec3s v, int s) {
|
||||
ivec3s r;
|
||||
glm_ivec3_scale(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with another component-wise division: d = a / b
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(div)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_div(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief div vector with scalar: d = v / s
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns result = (a[0]/s, a[1]/s, a[2]/s)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(divs)(ivec3s v, int s) {
|
||||
ivec3s r;
|
||||
glm_ivec3_divs(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief Element-wise modulo operation on ivec3 vectors: dest = a % b
|
||||
*
|
||||
* Performs element-wise modulo on each component of vectors `a` and `b`.
|
||||
*
|
||||
* @param[in] a vector 1
|
||||
* @param[in] b vector 2
|
||||
* @returns result = (a[0]%b[0], a[1]%b[1], a[2]%b[2])
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(mod)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_mod(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(addadd)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_addadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar [s] onto vector [a] and add result to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a + s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(addadds)(ivec3s a, int s, ivec3s dest) {
|
||||
glm_ivec3_addadds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [a] from vector [b] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a - b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(subadd)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_subadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar [s] from vector [a] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a - s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(subadds)(ivec3s a, int s, ivec3s dest) {
|
||||
glm_ivec3_subadds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a * b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(muladd)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_muladd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar [s] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a * s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(muladds)(ivec3s a, int s, ivec3s dest) {
|
||||
glm_ivec3_muladds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add maximum of vector [a] and vector [b] to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += max(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(maxadd)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_maxadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add minimum of vector [a] and vector [b] to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += min(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(minadd)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_minadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [a] from vector [b] and subtract result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= (a - b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(subsub)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_subsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar [s] from vector [a] and subtract result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a - s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(subsubs)(ivec3s a, int s, ivec3s dest) {
|
||||
glm_ivec3_subsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b scalar
|
||||
* @param[in] dest dest -= (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(addsub)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_addsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar [s] to vector [a] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(addsubs)(ivec3s a, int s, ivec3s dest) {
|
||||
glm_ivec3_addsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] and vector [b] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b scalar
|
||||
* @param[in] dest dest -= (a * b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(mulsub)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_mulsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a * s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(mulsubs)(ivec3s a, int s, ivec3s dest) {
|
||||
glm_ivec3_mulsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract maximum of vector [a] and vector [b] from vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= max(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(maxsub)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_maxsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract minimum of vector [a] and vector [b] from vector [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= min(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(minsub)(ivec3s a, ivec3s b, ivec3s dest) {
|
||||
glm_ivec3_minsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @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
|
||||
glms_ivec3_(distance2)(ivec3s a, ivec3s b) {
|
||||
return glm_ivec3_distance2(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief distance between two vectors
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @return returns distance
|
||||
*/
|
||||
CGLM_INLINE
|
||||
float
|
||||
glms_ivec3_(distance)(ivec3s a, ivec3s b) {
|
||||
return glm_ivec3_distance(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief fill a vector with specified value
|
||||
*
|
||||
* @param[in] val value
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(fill)(int val) {
|
||||
ivec3s r;
|
||||
glm_ivec3_fill(r.raw, val);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief check if vector is equal to value
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] val value
|
||||
*/
|
||||
CGLM_INLINE
|
||||
bool
|
||||
glms_ivec3_(eq)(ivec3s v, int val) {
|
||||
return glm_ivec3_eq(v.raw, val);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief check if vector is equal to another
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
bool
|
||||
glms_ivec3_(eqv)(ivec3s a, ivec3s b) {
|
||||
return glm_ivec3_eqv(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set each member of dest to greater of vector a and b
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(maxv)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_maxv(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set each member of dest to lesser of vector a and b
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(minv)(ivec3s a, ivec3s b) {
|
||||
ivec3s r;
|
||||
glm_ivec3_minv(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief clamp each member of [v] between minVal and maxVal (inclusive)
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] minVal minimum value
|
||||
* @param[in] maxVal maximum value
|
||||
* @returns clamped vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(clamp)(ivec3s v, int minVal, int maxVal) {
|
||||
glm_ivec3_clamp(v.raw, minVal, maxVal);
|
||||
return v;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief absolute value of v
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec3s
|
||||
glms_ivec3_(abs)(ivec3s v) {
|
||||
ivec3s r;
|
||||
glm_ivec3_abs(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* cglms_ivec3_h */
|
||||
588
include/cglm/struct/ivec4.h
Normal file
588
include/cglm/struct/ivec4.h
Normal file
@@ -0,0 +1,588 @@
|
||||
/*
|
||||
* Copyright (c), Recep Aslantas.
|
||||
*
|
||||
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||
* Full license can be found in the LICENSE file
|
||||
*/
|
||||
|
||||
/*
|
||||
Macros:
|
||||
GLMS_IVEC4_ONE_INIT
|
||||
GLMS_IVEC4_ZERO_INIT
|
||||
GLMS_IVEC4_ONE
|
||||
GLMS_IVEC4_ZERO
|
||||
|
||||
Functions:
|
||||
CGLM_INLINE ivec4s glms_ivec4(ivec3s v3, int last)
|
||||
CGLM_INLINE void glms_ivec4_pack(ivec4s dst[], ivec4 src[], size_t len)
|
||||
CGLM_INLINE void glms_ivec4_unpack(ivec4 dst[], ivec4s src[], size_t len)
|
||||
CGLM_INLINE ivec4s glms_ivec4_zero(void)
|
||||
CGLM_INLINE ivec4s glms_ivec4_one(void)
|
||||
CGLM_INLINE ivec4s glms_ivec4_add(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE ivec4s glms_ivec4_adds(ivec4s v, int s)
|
||||
CGLM_INLINE ivec4s glms_ivec4_sub(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE ivec4s glms_ivec4_subs(ivec4s v, int s)
|
||||
CGLM_INLINE ivec4s glms_ivec4_mul(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE ivec4s glms_ivec4_scale(ivec4s v, int s)
|
||||
CGLM_INLINE ivec4s glms_ivec4_addadd(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_addadds(ivec4s a, int s, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_subadd(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_subadds(ivec4s a, int s, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_muladd(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_muladds(ivec4s a, int s, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_maxadd(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_minadd(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_subsub(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_subsubs(ivec4s a, int s, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_addsub(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_addsubs(ivec4s a, int s, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_mulsub(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_mulsubs(ivec4s a, int s, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_maxsub(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE ivec4s glms_ivec4_minsub(ivec4s a, ivec4s b, ivec4s dest)
|
||||
CGLM_INLINE int glms_ivec4_distance2(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE float glms_ivec4_distance(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE ivec4s glms_ivec4_maxv(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE ivec4s glms_ivec4_minv(ivec4s a, ivec4s b)
|
||||
CGLM_INLINE ivec4s glms_ivec4_clamp(ivec4s v, int minVal, int maxVal)
|
||||
CGLM_INLINE ivec4s glms_ivec4_abs(ivec4s v)
|
||||
*/
|
||||
|
||||
#ifndef cglms_ivec4_h
|
||||
#define cglms_ivec4_h
|
||||
|
||||
#include "../common.h"
|
||||
#include "../types-struct.h"
|
||||
#include "../ivec4.h"
|
||||
|
||||
#define glms_ivec4_(NAME) CGLM_STRUCTAPI(ivec4, NAME)
|
||||
|
||||
#define GLMS_IVEC4_ONE_INIT {GLM_IVEC4_ONE_INIT}
|
||||
#define GLMS_IVEC4_ZERO_INIT {GLM_IVEC4_ZERO_INIT}
|
||||
|
||||
#define GLMS_IVEC4_ONE ((ivec4s)GLMS_IVEC4_ONE_INIT)
|
||||
#define GLMS_IVEC4_ZERO ((ivec4s)GLMS_IVEC4_ZERO_INIT)
|
||||
|
||||
/*!
|
||||
* @brief init ivec4 using ivec3
|
||||
*
|
||||
* @param[in] v3 vector3
|
||||
* @param[in] last last item
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4(ivec3s v3, int last) {
|
||||
ivec4s r;
|
||||
glm_ivec4(v3.raw, last, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief pack an array of ivec4 into an array of ivec4s
|
||||
*
|
||||
* @param[out] dst array of ivec4s
|
||||
* @param[in] src array of ivec4
|
||||
* @param[in] len number of elements
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec4_(pack)(ivec4s dst[], ivec4 src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
glm_ivec4_copy(src[i], dst[i].raw);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief unpack an array of ivec4s into an array of ivec4
|
||||
*
|
||||
* @param[out] dst array of ivec4
|
||||
* @param[in] src array of ivec4s
|
||||
* @param[in] len number of elements
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_ivec4_(unpack)(ivec4 dst[], ivec4s src[], size_t len) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
glm_ivec4_copy(src[i].raw, dst[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set all members of [v] to zero
|
||||
*
|
||||
* @returns vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(zero)(void) {
|
||||
ivec4s r;
|
||||
glm_ivec4_zero(r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set all members of [v] to one
|
||||
*
|
||||
* @returns vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(one)(void) {
|
||||
ivec4s r;
|
||||
glm_ivec4_one(r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(add)(ivec4s a, ivec4s b) {
|
||||
ivec4s r;
|
||||
glm_ivec4_add(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar s to vector [v] and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(adds)(ivec4s v, int s) {
|
||||
ivec4s r;
|
||||
glm_ivec4_adds(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [b] from vector [a] and store result in [dest]
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(sub)(ivec4s a, ivec4s b) {
|
||||
ivec4s r;
|
||||
glm_ivec4_sub(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar s from vector [v] and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(subs)(ivec4s v, int s) {
|
||||
ivec4s r;
|
||||
glm_ivec4_subs(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||
*
|
||||
* @param[in] a frist vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(mul)(ivec4s a, ivec4s b) {
|
||||
ivec4s r;
|
||||
glm_ivec4_mul(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar s and store result in [dest]
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] s scalar
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(scale)(ivec4s v, int s) {
|
||||
ivec4s r;
|
||||
glm_ivec4_scale(v.raw, s, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(addadd)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_addadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar [s] onto vector [a] and add result to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a + s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(addadds)(ivec4s a, int s, ivec4s dest) {
|
||||
glm_ivec4_addadds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [a] from vector [b] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a - b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(subadd)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_subadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar [s] from vector [a] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a - s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(subadds)(ivec4s a, int s, ivec4s dest) {
|
||||
glm_ivec4_subadds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with vector [b] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += (a * b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(muladd)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_muladd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar [s] and add result to [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest += (a * s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(muladds)(ivec4s a, int s, ivec4s dest) {
|
||||
glm_ivec4_muladds(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add maximum of vector [a] and vector [b] to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += max(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(maxadd)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_maxadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add minimum of vector [a] and vector [b] to vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest += min(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(minadd)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_minadd(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract vector [a] from vector [b] and subtract result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= (a - b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(subsub)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_subsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract scalar [s] from vector [a] and subtract result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a - s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(subsubs)(ivec4s a, int s, ivec4s dest) {
|
||||
glm_ivec4_subsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add vector [a] to vector [b] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b scalar
|
||||
* @param[in] dest dest -= (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(addsub)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_addsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief add scalar [s] to vector [a] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a + b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(addsubs)(ivec4s a, int s, ivec4s dest) {
|
||||
glm_ivec4_addsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] and vector [b] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] b scalar
|
||||
* @param[in] dest dest -= (a * b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(mulsub)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_mulsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a vector
|
||||
* @param[in] s scalar
|
||||
* @param[in] dest dest -= (a * s)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(mulsubs)(ivec4s a, int s, ivec4s dest) {
|
||||
glm_ivec4_mulsubs(a.raw, s, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract maximum of vector [a] and vector [b] from vector [dest]
|
||||
*
|
||||
* applies += operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= max(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(maxsub)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_maxsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief subtract minimum of vector [a] and vector [b] from vector [dest]
|
||||
*
|
||||
* applies -= operator so dest must be initialized
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @param[in] dest dest -= min(a, b)
|
||||
* @returns dest
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(minsub)(ivec4s a, ivec4s b, ivec4s dest) {
|
||||
glm_ivec4_minsub(a.raw, b.raw, dest.raw);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @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
|
||||
glms_ivec4_(distance2)(ivec4s a, ivec4s b) {
|
||||
return glm_ivec4_distance2(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief distance between two vectors
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @return returns distance
|
||||
*/
|
||||
CGLM_INLINE
|
||||
float
|
||||
glms_ivec4_(distance)(ivec4s a, ivec4s b) {
|
||||
return glm_ivec4_distance(a.raw, b.raw);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set each member of dest to greater of vector a and b
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(maxv)(ivec4s a, ivec4s b) {
|
||||
ivec4s r;
|
||||
glm_ivec4_maxv(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief set each member of dest to lesser of vector a and b
|
||||
*
|
||||
* @param[in] a first vector
|
||||
* @param[in] b second vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(minv)(ivec4s a, ivec4s b) {
|
||||
ivec4s r;
|
||||
glm_ivec4_minv(a.raw, b.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief clamp each member of [v] between minVal and maxVal (inclusive)
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @param[in] minVal minimum value
|
||||
* @param[in] maxVal maximum value
|
||||
* @returns clamped vector
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(clamp)(ivec4s v, int minVal, int maxVal) {
|
||||
glm_ivec4_clamp(v.raw, minVal, maxVal);
|
||||
return v;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief absolute value of v
|
||||
*
|
||||
* @param[in] v vector
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
ivec4s
|
||||
glms_ivec4_(abs)(ivec4s v) {
|
||||
ivec4s r;
|
||||
glm_ivec4_abs(v.raw, r.raw);
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* cglms_ivec4_h */
|
||||
@@ -140,7 +140,7 @@ glms_mat3_(mul)(mat3s m1, mat3s m2) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief tranpose mat3 and store result in same matrix
|
||||
* @brief transpose mat3 and store result in same matrix
|
||||
*
|
||||
* @param[in, out] m source and dest
|
||||
*/
|
||||
|
||||
@@ -107,7 +107,7 @@ glms_mat4_(copy)(mat4s mat) {
|
||||
* mat4 mat = GLM_MAT4_IDENTITY_INIT;
|
||||
* @endcode
|
||||
*
|
||||
* @retuns destination
|
||||
* @returns destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
@@ -319,7 +319,7 @@ glms_mat4_(mulv3)(mat4s m, vec3s v, float last) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief tranpose mat4 and store result in same matrix
|
||||
* @brief transpose mat4 and store result in same matrix
|
||||
*
|
||||
* @param[in] m source
|
||||
* @returns result
|
||||
|
||||
@@ -446,7 +446,7 @@ glms_quat_(nlerp)(versors from, versors to, float t) {
|
||||
*
|
||||
* @param[in] from from
|
||||
* @param[in] to to
|
||||
* @param[in] t amout
|
||||
* @param[in] t amount
|
||||
* @returns result quaternion
|
||||
*/
|
||||
CGLM_INLINE
|
||||
|
||||
@@ -179,7 +179,7 @@ glms_vec2_(cross)(vec2s a, vec2s b) {
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vector
|
||||
|
||||
@@ -194,7 +194,7 @@ glms_vec3_(dot)(vec3s a, vec3s b) {
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vector
|
||||
@@ -656,7 +656,7 @@ glms_vec3_(crossn)(vec3s a, vec3s b) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief angle betwen two vector
|
||||
* @brief angle between two vector
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
@@ -1055,7 +1055,7 @@ glms_normalize(vec3s v) {
|
||||
/*!
|
||||
* @brief swizzle vector components
|
||||
*
|
||||
* you can use existin masks e.g. GLM_XXX, GLM_ZYX
|
||||
* you can use existing masks e.g. GLM_XXX, GLM_ZYX
|
||||
*
|
||||
* @param[in] v source
|
||||
* @param[in] mask mask
|
||||
|
||||
@@ -223,7 +223,7 @@ glms_vec4_(dot)(vec4s a, vec4s b) {
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vec4
|
||||
@@ -899,7 +899,7 @@ glms_vec4_(cubic)(float s) {
|
||||
/*!
|
||||
* @brief swizzle vector components
|
||||
*
|
||||
* you can use existin masks e.g. GLM_XXXX, GLM_WZYX
|
||||
* you can use existing masks e.g. GLM_XXXX, GLM_WZYX
|
||||
*
|
||||
* @param[in] v source
|
||||
* @param[in] mask mask
|
||||
|
||||
@@ -87,7 +87,7 @@ glm_deg(float rad) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief convert exsisting degree to radians. this will override degrees value
|
||||
* @brief convert existing degree to radians. this will override degrees value
|
||||
*
|
||||
* @param[in, out] deg pointer to angle in degrees
|
||||
*/
|
||||
@@ -98,7 +98,7 @@ glm_make_rad(float *deg) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief convert exsisting radians to degree. this will override radians value
|
||||
* @brief convert existing radians to degree. this will override radians value
|
||||
*
|
||||
* @param[in, out] rad pointer to angle in radians
|
||||
*/
|
||||
|
||||
@@ -154,7 +154,7 @@ glm_vec2_cross(vec2 a, vec2 b) {
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vector
|
||||
|
||||
@@ -196,7 +196,7 @@ glm_vec3_dot(vec3 a, vec3 b) {
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vector
|
||||
@@ -710,7 +710,7 @@ glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief angle betwen two vector
|
||||
* @brief angle between two vector
|
||||
*
|
||||
* @param[in] a vector1
|
||||
* @param[in] b vector2
|
||||
@@ -1112,7 +1112,7 @@ glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest) {
|
||||
/*!
|
||||
* @brief swizzle vector components
|
||||
*
|
||||
* you can use existin masks e.g. GLM_XXX, GLM_ZYX
|
||||
* you can use existing masks e.g. GLM_XXX, GLM_ZYX
|
||||
*
|
||||
* @param[in] v source
|
||||
* @param[in] mask mask
|
||||
|
||||
@@ -246,7 +246,7 @@ glm_vec4_dot(vec4 a, vec4 b) {
|
||||
* @brief norm * norm (magnitude) of vec
|
||||
*
|
||||
* we can use this func instead of calling norm * norm, because it would call
|
||||
* sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
||||
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||
* not good name for this func
|
||||
*
|
||||
* @param[in] v vec4
|
||||
@@ -1272,7 +1272,7 @@ glm_vec4_cubic(float s, vec4 dest) {
|
||||
/*!
|
||||
* @brief swizzle vector components
|
||||
*
|
||||
* you can use existin masks e.g. GLM_XXXX, GLM_WZYX
|
||||
* you can use existing masks e.g. GLM_XXXX, GLM_WZYX
|
||||
*
|
||||
* @param[in] v source
|
||||
* @param[in] mask mask
|
||||
|
||||
16
src/aabb2d.c
16
src/aabb2d.c
@@ -8,6 +8,12 @@
|
||||
#include "../include/cglm/cglm.h"
|
||||
#include "../include/cglm/call.h"
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_aabb2d_zero(vec2 aabb[2]) {
|
||||
glm_aabb2d_zero(aabb);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_aabb2d_copy(vec2 aabb[2], vec2 dest[2]) {
|
||||
@@ -55,8 +61,14 @@ glmc_aabb2d_isvalid(vec2 aabb[2]) {
|
||||
|
||||
CGLM_EXPORT
|
||||
float
|
||||
glmc_aabb2d_size(vec2 aabb[2]) {
|
||||
return glm_aabb2d_size(aabb);
|
||||
glmc_aabb2d_diag(vec2 aabb[2]) {
|
||||
return glm_aabb2d_diag(aabb);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_aabb2d_sizev(vec2 aabb[2], vec2 dest) {
|
||||
glm_aabb2d_sizev(aabb, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
|
||||
30
src/ivec2.c
30
src/ivec2.c
@@ -32,6 +32,18 @@ glmc_ivec2_one(ivec2 v) {
|
||||
glm_ivec2_one(v);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec2_dot(ivec2 a, ivec2 b) {
|
||||
return glm_ivec2_dot(a, b);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec2_cross(ivec2 a, ivec2 b) {
|
||||
return glm_ivec2_cross(a, b);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_add(ivec2 a, ivec2 b, ivec2 dest) {
|
||||
@@ -68,6 +80,24 @@ glmc_ivec2_scale(ivec2 v, int s, ivec2 dest) {
|
||||
glm_ivec2_scale(v, s, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_div(ivec2 a, ivec2 b, ivec2 dest) {
|
||||
glm_ivec2_div(a, b, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_divs(ivec2 v, int s, ivec2 dest) {
|
||||
glm_ivec2_divs(v, s, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest) {
|
||||
glm_ivec2_mod(a, b, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest) {
|
||||
|
||||
36
src/ivec3.c
36
src/ivec3.c
@@ -32,6 +32,24 @@ glmc_ivec3_one(ivec3 v) {
|
||||
glm_ivec3_one(v);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec3_dot(ivec3 a, ivec3 b) {
|
||||
return glm_ivec3_dot(a, b);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec3_norm2(ivec3 v) {
|
||||
return glm_ivec3_norm2(v);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
int
|
||||
glmc_ivec3_norm(ivec3 v) {
|
||||
return glm_ivec3_norm(v);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_add(ivec3 a, ivec3 b, ivec3 dest) {
|
||||
@@ -68,6 +86,24 @@ glmc_ivec3_scale(ivec3 v, int s, ivec3 dest) {
|
||||
glm_ivec3_scale(v, s, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_div(ivec3 a, ivec3 b, ivec3 dest) {
|
||||
glm_ivec3_div(a, b, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_divs(ivec3 v, int s, ivec3 dest) {
|
||||
glm_ivec3_divs(v, s, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest) {
|
||||
glm_ivec3_mod(a, b, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest) {
|
||||
|
||||
@@ -54,6 +54,34 @@ TEST_IMPL(GLM_PREFIX, ivec2_one) {
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_dot) {
|
||||
ivec2 a = {2, 3};
|
||||
ivec2 b = {4, 4};
|
||||
int dot1, dot2;
|
||||
|
||||
dot1 = GLM(ivec2_dot)(a, b);
|
||||
dot2 = a[0] * b[0] + a[1] * b[1];
|
||||
|
||||
ASSERT(dot1 == dot2)
|
||||
ASSERT(dot1 == 20)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_cross) {
|
||||
ivec2 a = {10, 9};
|
||||
ivec2 b = {1, 2};
|
||||
int cross1, cross2;
|
||||
|
||||
cross1 = GLM(ivec2_cross)(a, b);
|
||||
cross2 = a[0] * b[1] - a[1] * b[0];
|
||||
|
||||
ASSERT(cross1 == cross2)
|
||||
ASSERT(cross1 == 11)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_add) {
|
||||
ivec2 a = {14, 3};
|
||||
ivec2 b = {-3, 2};
|
||||
@@ -126,6 +154,50 @@ TEST_IMPL(GLM_PREFIX, ivec2_scale) {
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_div) {
|
||||
ivec2 v1 = {6, 5},
|
||||
v2 = {-2, 4},
|
||||
v3;
|
||||
|
||||
GLM(ivec2_div)(v1, v2, v3);
|
||||
|
||||
ASSERT(v1[0] / v2[0] == v3[0])
|
||||
ASSERT(v1[1] / v2[1] == v3[1])
|
||||
ASSERT(v3[0] == -3)
|
||||
ASSERT(v3[1] == 1)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_divs) {
|
||||
ivec2 v1 = {16, -8}, v2;
|
||||
int s = 4;
|
||||
|
||||
GLM(ivec2_divs)(v1, s, v2);
|
||||
|
||||
ASSERT(v1[0] / s == v2[0])
|
||||
ASSERT(v1[1] / s == v2[1])
|
||||
ASSERT(v2[0] == 4)
|
||||
ASSERT(v2[1] == -2)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_mod) {
|
||||
ivec2 a = {16, -8};
|
||||
ivec2 b = {3, 5};
|
||||
ivec2 dest;
|
||||
|
||||
GLM(ivec2_mod)(a, b, dest);
|
||||
|
||||
ASSERT(a[0] % b[0] == dest[0])
|
||||
ASSERT(a[1] % b[1] == dest[1])
|
||||
ASSERT(dest[0] == 1)
|
||||
ASSERT(dest[1] == -3)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec2_addadd) {
|
||||
ivec2 a = {2, -3},
|
||||
b = {-3, 4},
|
||||
|
||||
@@ -53,6 +53,46 @@ TEST_IMPL(GLM_PREFIX, ivec3_one) {
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_dot) {
|
||||
ivec3 a = {2, 3, 1};
|
||||
ivec3 b = {4, 4, 2};
|
||||
int dot1, dot2;
|
||||
|
||||
dot1 = GLM(ivec3_dot)(a, b);
|
||||
dot2 = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||
|
||||
ASSERT(dot1 == dot2)
|
||||
ASSERT(dot1 == 22)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_norm2) {
|
||||
ivec3 v = {2, 3, 4};
|
||||
int norm2_1, norm2_2;
|
||||
|
||||
norm2_1 = GLM(ivec3_norm2)(v);
|
||||
norm2_2 = v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
|
||||
|
||||
ASSERT(norm2_1 == norm2_2)
|
||||
ASSERT(norm2_1 == 29)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_norm) {
|
||||
ivec3 v = {2, 3, 4};
|
||||
int norm1, norm2;
|
||||
|
||||
norm1 = GLM(ivec3_norm)(v);
|
||||
norm2 = (int)sqrtf((float)(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]));
|
||||
|
||||
ASSERT(norm1 == norm2)
|
||||
ASSERT(norm1 == 5)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_add) {
|
||||
ivec3 a = {14, 3, 2};
|
||||
ivec3 b = {-3, 2, 1};
|
||||
@@ -131,6 +171,56 @@ TEST_IMPL(GLM_PREFIX, ivec3_scale) {
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_div) {
|
||||
ivec3 v1 = {6, 5, 8},
|
||||
v2 = {-2, 4, 2},
|
||||
v3;
|
||||
|
||||
GLM(ivec3_div)(v1, v2, v3);
|
||||
|
||||
ASSERT(v1[0] / v2[0] == v3[0])
|
||||
ASSERT(v1[1] / v2[1] == v3[1])
|
||||
ASSERT(v1[2] / v2[2] == v3[2])
|
||||
ASSERT(v3[0] == -3)
|
||||
ASSERT(v3[1] == 1)
|
||||
ASSERT(v3[2] == 4)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_divs) {
|
||||
ivec3 v1 = {16, -8, 12}, v2;
|
||||
int s = 4;
|
||||
|
||||
GLM(ivec3_divs)(v1, s, v2);
|
||||
|
||||
ASSERT(v1[0] / s == v2[0])
|
||||
ASSERT(v1[1] / s == v2[1])
|
||||
ASSERT(v1[2] / s == v2[2])
|
||||
ASSERT(v2[0] == 4)
|
||||
ASSERT(v2[1] == -2)
|
||||
ASSERT(v2[2] == 3)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_mod) {
|
||||
ivec3 a = {16, -8, 10};
|
||||
ivec3 b = {3, 5, 4};
|
||||
ivec3 dest;
|
||||
|
||||
GLM(ivec3_mod)(a, b, dest);
|
||||
|
||||
ASSERT(a[0] % b[0] == dest[0])
|
||||
ASSERT(a[1] % b[1] == dest[1])
|
||||
ASSERT(a[2] % b[2] == dest[2])
|
||||
ASSERT(dest[0] == 1)
|
||||
ASSERT(dest[1] == -3)
|
||||
ASSERT(dest[2] == 2)
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ivec3_addadd) {
|
||||
ivec3 a = {2, -3, 8},
|
||||
b = {-3, 4, 5},
|
||||
|
||||
44
test/tests.h
44
test/tests.h
@@ -920,12 +920,17 @@ TEST_DECLARE(glm_ivec2)
|
||||
TEST_DECLARE(glm_ivec2_copy)
|
||||
TEST_DECLARE(glm_ivec2_zero)
|
||||
TEST_DECLARE(glm_ivec2_one)
|
||||
TEST_DECLARE(glm_ivec2_dot)
|
||||
TEST_DECLARE(glm_ivec2_cross)
|
||||
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_div)
|
||||
TEST_DECLARE(glm_ivec2_divs)
|
||||
TEST_DECLARE(glm_ivec2_mod)
|
||||
TEST_DECLARE(glm_ivec2_addadd)
|
||||
TEST_DECLARE(glm_ivec2_addadds)
|
||||
TEST_DECLARE(glm_ivec2_subadd)
|
||||
@@ -956,12 +961,17 @@ TEST_DECLARE(glmc_ivec2)
|
||||
TEST_DECLARE(glmc_ivec2_copy)
|
||||
TEST_DECLARE(glmc_ivec2_zero)
|
||||
TEST_DECLARE(glmc_ivec2_one)
|
||||
TEST_DECLARE(glmc_ivec2_dot)
|
||||
TEST_DECLARE(glmc_ivec2_cross)
|
||||
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_div)
|
||||
TEST_DECLARE(glmc_ivec2_divs)
|
||||
TEST_DECLARE(glmc_ivec2_mod)
|
||||
TEST_DECLARE(glmc_ivec2_addadd)
|
||||
TEST_DECLARE(glmc_ivec2_addadds)
|
||||
TEST_DECLARE(glmc_ivec2_subadd)
|
||||
@@ -993,12 +1003,18 @@ TEST_DECLARE(glm_ivec3)
|
||||
TEST_DECLARE(glm_ivec3_copy)
|
||||
TEST_DECLARE(glm_ivec3_zero)
|
||||
TEST_DECLARE(glm_ivec3_one)
|
||||
TEST_DECLARE(glm_ivec3_dot)
|
||||
TEST_DECLARE(glm_ivec3_norm2)
|
||||
TEST_DECLARE(glm_ivec3_norm)
|
||||
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_div)
|
||||
TEST_DECLARE(glm_ivec3_divs)
|
||||
TEST_DECLARE(glm_ivec3_mod)
|
||||
TEST_DECLARE(glm_ivec3_addadd)
|
||||
TEST_DECLARE(glm_ivec3_addadds)
|
||||
TEST_DECLARE(glm_ivec3_subadd)
|
||||
@@ -1028,12 +1044,18 @@ TEST_DECLARE(glmc_ivec3)
|
||||
TEST_DECLARE(glmc_ivec3_copy)
|
||||
TEST_DECLARE(glmc_ivec3_zero)
|
||||
TEST_DECLARE(glmc_ivec3_one)
|
||||
TEST_DECLARE(glmc_ivec3_dot)
|
||||
TEST_DECLARE(glmc_ivec3_norm2)
|
||||
TEST_DECLARE(glmc_ivec3_norm)
|
||||
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_div)
|
||||
TEST_DECLARE(glmc_ivec3_divs)
|
||||
TEST_DECLARE(glmc_ivec3_mod)
|
||||
TEST_DECLARE(glmc_ivec3_addadd)
|
||||
TEST_DECLARE(glmc_ivec3_addadds)
|
||||
TEST_DECLARE(glmc_ivec3_subadd)
|
||||
@@ -2055,12 +2077,17 @@ TEST_LIST {
|
||||
TEST_ENTRY(glm_ivec2_copy)
|
||||
TEST_ENTRY(glm_ivec2_zero)
|
||||
TEST_ENTRY(glm_ivec2_one)
|
||||
TEST_ENTRY(glm_ivec2_dot)
|
||||
TEST_ENTRY(glm_ivec2_cross)
|
||||
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_div)
|
||||
TEST_ENTRY(glm_ivec2_divs)
|
||||
TEST_ENTRY(glm_ivec2_mod)
|
||||
TEST_ENTRY(glm_ivec2_addadd)
|
||||
TEST_ENTRY(glm_ivec2_addadds)
|
||||
TEST_ENTRY(glm_ivec2_subadd)
|
||||
@@ -2091,12 +2118,17 @@ TEST_LIST {
|
||||
TEST_ENTRY(glmc_ivec2_copy)
|
||||
TEST_ENTRY(glmc_ivec2_zero)
|
||||
TEST_ENTRY(glmc_ivec2_one)
|
||||
TEST_ENTRY(glmc_ivec2_dot)
|
||||
TEST_ENTRY(glmc_ivec2_cross)
|
||||
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_div)
|
||||
TEST_ENTRY(glmc_ivec2_divs)
|
||||
TEST_ENTRY(glmc_ivec2_mod)
|
||||
TEST_ENTRY(glmc_ivec2_addadd)
|
||||
TEST_ENTRY(glmc_ivec2_addadds)
|
||||
TEST_ENTRY(glmc_ivec2_subadd)
|
||||
@@ -2128,12 +2160,18 @@ TEST_LIST {
|
||||
TEST_ENTRY(glm_ivec3_copy)
|
||||
TEST_ENTRY(glm_ivec3_zero)
|
||||
TEST_ENTRY(glm_ivec3_one)
|
||||
TEST_ENTRY(glm_ivec3_dot)
|
||||
TEST_ENTRY(glm_ivec3_norm2)
|
||||
TEST_ENTRY(glm_ivec3_norm)
|
||||
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_div)
|
||||
TEST_ENTRY(glm_ivec3_divs)
|
||||
TEST_ENTRY(glm_ivec3_mod)
|
||||
TEST_ENTRY(glm_ivec3_addadd)
|
||||
TEST_ENTRY(glm_ivec3_addadds)
|
||||
TEST_ENTRY(glm_ivec3_subadd)
|
||||
@@ -2163,12 +2201,18 @@ TEST_LIST {
|
||||
TEST_ENTRY(glmc_ivec3_copy)
|
||||
TEST_ENTRY(glmc_ivec3_zero)
|
||||
TEST_ENTRY(glmc_ivec3_one)
|
||||
TEST_ENTRY(glmc_ivec3_dot)
|
||||
TEST_ENTRY(glmc_ivec3_norm2)
|
||||
TEST_ENTRY(glmc_ivec3_norm)
|
||||
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_div)
|
||||
TEST_ENTRY(glmc_ivec3_divs)
|
||||
TEST_ENTRY(glmc_ivec3_mod)
|
||||
TEST_ENTRY(glmc_ivec3_addadd)
|
||||
TEST_ENTRY(glmc_ivec3_addadds)
|
||||
TEST_ENTRY(glmc_ivec3_subadd)
|
||||
|
||||
0
win/build.bat
Normal file → Executable file
0
win/build.bat
Normal file → Executable file
Reference in New Issue
Block a user