Compare commits

...

12 Commits

Author SHA1 Message Date
d3511a9b52 Forgot to change something in the CI oops
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-12 01:07:10 +02:00
eed719674f Add CI
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-12 01:05:57 +02:00
5f0badfe64 Fix packaging for Nix
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-12 01:05:14 +02:00
1a42238a41 Formatting + new packing related functions
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-11 12:55:04 +02:00
a5d669235e Fix some math
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-07 00:11:21 +02:00
2d86e02038 Translate
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-06 23:01:49 +02:00
b5e0aabe37 Create unpacking function for vectors
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-06 21:37:46 +02:00
e32204db0c Add default case to shut compilers up
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-04 17:42:13 +02:00
37f085ee36 Quick matrix aliases
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-04 17:17:00 +02:00
13288eda01 Matrix stuff
Signed-off-by: Slendi <slendi@socopon.com>
2025-12-04 16:30:30 +02:00
bf1c2ee0c8 Add Matrices
Signed-off-by: Slendi <slendi@socopon.com>
2025-11-28 19:02:52 +02:00
f6e2bc01b1 Add quaternions
Signed-off-by: Slendi <slendi@socopon.com>
2025-11-28 16:14:49 +02:00
6 changed files with 1109 additions and 424 deletions

29
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Build project
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-22.04
permissions:
id-token: write
contents: read
steps:
- name: git checkout
uses: actions/checkout@v3
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
- name: Building default package
run: nix build .#default
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: result
path: result

View File

@@ -67,13 +67,17 @@ endif()
if(BUILD_TESTS)
enable_testing()
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
find_package(GTest QUIET)
if(NOT GTest_FOUND)
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
endif()
file(GLOB TEST_SOURCES "${CMAKE_SOURCE_DIR}/tests/*.cpp")
@@ -86,3 +90,4 @@ if(BUILD_TESTS)
include(GoogleTest)
gtest_discover_tests(smath_tests)
endif()

View File

@@ -1,4 +1,19 @@
# smath
Single-file linear algebra math library for C++23.
Single-file, header-only linear algebra math library for C++23.
## Features
- Generic `Vec<N, T>` class with useful aliases `Vec2/Vec3/Vec4` and friendly accessors (`x/y/z/w`, `r/g/b/a`). They support approx-equal and tuple/structured bindings.
- `std::format` support.
- Compile-time swizzles via `swizzle<"...">`.
- Generic matrix `Mat` class with useful aliases `Mat2/Mat3/Mat4`.
- `Quaternion<T>` built on `Vec4`.
- Angle helpers `rad/deg/turns` respecting a configurable base unit via the macro `SMATH_ANGLE_UNIT`.
- Optional implicit conversions.
- Packing utilities for normalized RGBA (`pack_unorm4x8`, `unpack_snorm4x8`, etc.).
## License
This library is licensed under the Apache License 2.0. See the (LICENSE.txt)[LICENSE.txt] file for more details.

View File

@@ -39,6 +39,9 @@ int main() {
std::println("std::get<1>(v): {}", std::get<1>(v));
auto [x, y, z] = v;
std::println("Bindings: [{}, {}, {}]", x, y, z);
float x1{}, y1{}, z1{};
v.unpack(x1, y1, z1);
std::println("Unpacked: {}, {}, {}", x1, y1, z1);
// Let's mix and match!
Vec<6> v3(v, 7, swizzle<"zy">(v2));

View File

@@ -36,7 +36,11 @@
src = ./.;
nativeBuildInputs = [ pkgs.copyPkgconfigItems ];
nativeBuildInputs = with pkgs; [
cmake
gtest
copyPkgconfigItems
];
pkgconfigItems = [
(pkgs.makePkgconfigItem rec {
@@ -51,17 +55,18 @@
})
];
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/include
cp include/*.hpp $out/include/
cp ../include/smath.hpp $out/include/
runHook postInstall
'';
dontBuild = false;
doCheck = true;
meta = with pkgs.lib; {
description = desc;
description = "Single-file linear algebra math library for C++23.";
homepage = "https://github.com/slendidev/smath";
license = licenses.asl20;
platforms = platforms.all;

File diff suppressed because it is too large Load Diff