Skip to main content

GdMath: a fast math library for game development

Project description

GdMath: a fast math library for game development

Codegen Tests Release

Main features

  • 100% Cython implementation (~30x speedup from pure python on average)
  • Linear Algebra
    • Vector
      • Pythonic and GLSL-like
      • +, -, *, /, @(dot), ^(cross) ...
      • Fast swizzling (e.g. Vec3(1, 2, 3).zxy)
      • Flexible constructor (e.g. Vec3(Vec2(1, 2), 3))
      • Iterating and unpacking (e.g. x, y, z = Vec3(1, 2, 3))
    • Transform
      • W.I.P

Implementation detiles

This library uses code generation.
Every swizzle pattern and constructor are implemented as individual methods and properties (For performance reasons).
As a result, code generation is required so that I don't have to maintain 50,000+ lines of code by hand...
Besides, it also has the convenience that vector classes of every dimension and type (e.g. Vec2 Vec3 Vec2i Vec3i) are generated from the same template, so a lot of repetitive code is avoided.

Notes

  • This library was initially inspired by Godot's math library. (pun intended)
  • FYI, when I was coding this, I didn't know about Cython.Tempita until it's too late. It'd probably be a lot easier if I knew it from the beginning and don't have to write as much codegen by myself... But I'd still need to do things like overloading by myself anyway, so it's not a big deal.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gdmath-1.0.tar.gz (52.4 kB view hashes)

Uploaded Source

Built Distributions

gdmath-1.0-pp310-pypy310_pp73-win_amd64.whl (466.2 kB view hashes)

Uploaded PyPy Windows x86-64

gdmath-1.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (648.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

gdmath-1.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (577.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

gdmath-1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (512.6 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

gdmath-1.0-pp39-pypy39_pp73-win_amd64.whl (464.8 kB view hashes)

Uploaded PyPy Windows x86-64

gdmath-1.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (644.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

gdmath-1.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (575.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

gdmath-1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (511.1 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

gdmath-1.0-cp312-cp312-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

gdmath-1.0-cp312-cp312-win32.whl (388.0 kB view hashes)

Uploaded CPython 3.12 Windows x86

gdmath-1.0-cp312-cp312-musllinux_1_1_x86_64.whl (5.4 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

gdmath-1.0-cp312-cp312-musllinux_1_1_i686.whl (4.9 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

gdmath-1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.6 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

gdmath-1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

gdmath-1.0-cp312-cp312-macosx_11_0_arm64.whl (1.7 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

gdmath-1.0-cp312-cp312-macosx_10_9_x86_64.whl (768.8 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

gdmath-1.0-cp311-cp311-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

gdmath-1.0-cp311-cp311-win32.whl (384.3 kB view hashes)

Uploaded CPython 3.11 Windows x86

gdmath-1.0-cp311-cp311-musllinux_1_1_x86_64.whl (5.8 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

gdmath-1.0-cp311-cp311-musllinux_1_1_i686.whl (5.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

gdmath-1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.8 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

gdmath-1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

gdmath-1.0-cp311-cp311-macosx_11_0_arm64.whl (1.7 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

gdmath-1.0-cp311-cp311-macosx_10_9_x86_64.whl (760.2 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

gdmath-1.0-cp310-cp310-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

gdmath-1.0-cp310-cp310-win32.whl (382.9 kB view hashes)

Uploaded CPython 3.10 Windows x86

gdmath-1.0-cp310-cp310-musllinux_1_1_x86_64.whl (5.7 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

gdmath-1.0-cp310-cp310-musllinux_1_1_i686.whl (5.2 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

gdmath-1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

gdmath-1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

gdmath-1.0-cp310-cp310-macosx_11_0_arm64.whl (1.7 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

gdmath-1.0-cp310-cp310-macosx_10_9_x86_64.whl (759.5 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

gdmath-1.0-cp39-cp39-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

gdmath-1.0-cp39-cp39-win32.whl (385.9 kB view hashes)

Uploaded CPython 3.9 Windows x86

gdmath-1.0-cp39-cp39-musllinux_1_1_x86_64.whl (6.2 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

gdmath-1.0-cp39-cp39-musllinux_1_1_i686.whl (5.5 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

gdmath-1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

gdmath-1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

gdmath-1.0-cp39-cp39-macosx_11_0_arm64.whl (1.7 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

gdmath-1.0-cp39-cp39-macosx_10_9_x86_64.whl (779.9 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page