mirror of
https://github.com/slendidev/smath.git
synced 2026-03-17 02:26:50 +02:00
Those headers are used for interoping with various popular C++ libraries. For now, those libraries are Eigen, GLM, HandmadeMath, Raylib, and SFML. Some other ones may be added in the future. Those are disabled by default, as most projects I would imagine would not use them. But in case you need any of them for special reasons like I did, they are there. Signed-off-by: Slendi <slendi@socopon.com>
2.1 KiB
2.1 KiB
Features
- Generic
Vec<N, T>class with useful aliasesVec2/Vec3/Vec4and friendly accessors (x/y/z/w,r/g/b/a). They support approx-equal and tuple/structured bindings. std::formatsupport.- Compile-time swizzles via
swizzle<"...">. - Generic matrix
Matclass with useful aliasesMat2/Mat3/Mat4. Quaternion<T>built onVec4.- Angle helpers
rad/deg/turnsrespecting a configurable base unit via the macroSMATH_ANGLE_UNIT. - Optional implicit conversions.
- Packing utilities for normalized RGBA (
pack_unorm4x8,unpack_snorm4x8, etc.). - C++20 modules support.
- Built-in interop adapter and optional interop headers for various libraries.
Quick Start
Create main.cpp:
#include <print>
#include <smath/smath.hpp>
int main() {
using namespace smath;
Vec3 a{1.0f, 2.0f, 3.0f};
Vec3 b{3.0f, 2.0f, 1.0f};
std::println("a + b = {}", a + b);
std::println("dot(a, b) = {}", a.dot(b));
std::println("normalized(a) = {}", a.normalized());
}
Build and run:
g++ -std=c++23 -Iinclude main.cpp -o quickstart
./quickstart
Interop Headers
smath ships optional interop adapters under include/smath/interop/.
When installing with CMake, interop headers are gated behind:
-DSMATH_INSTALL_INTEROP_HEADERS=ON
All of them plug into the same generic API defined in smath.hpp:
auto v = smath::from_external(external_value);
auto ext = smath::to_external<ExternalType>(smath_value);
License
This library is licensed under the Apache License 2.0. See the LICENSE.txt file for more details.