Skip to main content

PyGLM

OpenGL Mathematics (GLM) library for Python

GLSL + Optional features + Python = PyGLM
A mathematics library for graphics programming.

PyGLM is a Python extension written in C++.
By using GLM by G-Truc under the hood, it manages to bring glm's features to Python.  
Some features are unsupported (such as unstable extensions) - Please see [Unsupported Functions] below.
If you encounter any issues or want to request a feature, please create an issue on the issue tracker.

Tiny Documentation

Why PyGLM?

Besides the obvious - being mostly compatible with GLM - PyGLM offers a variety of features for vector and matrix manipulation.
It has a lot of possible use cases, including 3D-Graphics (OpenGL, DirectX, ...), Physics and more.

At the same time, it has great performance, being between 2x and 15x as fast as numpy! (see end of page)
(depending on the individual function)

Installation

PyGLM supports Windows, Linux, MacOS and other operating systems with either x86 (32-bit) or x64 (64-bit) architecture,
running Python 3.5 or higher. (Prior versions of Python - such as Python 2 - were supported up to PyGLM version 0.4.8b1)

It can be installed from the PyPI using pip:

pip install pyglm

And finally imported and used:

import glm

Using PyGLM

PyGLM's syntax is very similar to the original GLM's syntax.
There is no need to import anything but glm, as it already contains the entire package.

License requirements

Please make sure to include the license for GLM in your project when you use PyGLM!
(this also includes binary distributions, e.g. *.exe)

You can do so by copying either the COPYING or GLM_LICENSE file (or their contents) to your project.

Differences to glm

Instead of using double colons (::) for namespaces, periods (.) are used, so
glm::vec2 becomes glm.vec2.

PyGLM supports the buffer protocol, meaning its compitible to other objects that support the buffer protocol,
such as bytes or numpy.array
(for example you can convert a glm matrix to a numpy array and vice versa).
PyGLM is also capable of interpreting iterables (such as tuples) as vectors, so e.g. the following equasion is possible:

result = glm.vec2(1) * (2, 3)

PyGLM doesn't support precision qualifiers. All types use the default precision (packed_highp).

If a glm function normally accepts float and double arguments, the higher precision (double) is used.

There is no way to set preprocessor definitions (macros).
If - for example - you need to use the left handed coordinate system, you have to use *LH, so
glm.perspective becomes glm.perspectiveLH.

All types are initialized by default to avoid memory access violations.
(i.e. the macro GLM_FORCE_CTOR_INIT is defined)

In case you need the size of a PyGLM datatype, you can use

glm.sizeof(<type>)

The function glm.identity requires a matrix type as it's argument.

The function glm.frexp(x, exp) returns a tuple (m, e), if the input arguments are numerical.
This function may issue a UserWarning. You can silence this warning using glm.silence(1).

The function glm.value_ptr(x) returns a ctypes pointer of the respective type.
I.e. if the datatype of x is float, then a c_float pointer will be returned.
Likewise the reverse-functions (such as make_vec2(ptr)) will take a ctypes pointer as their argument
and return (in this case) a 2 component vector of the pointers underlying type.

glm.silence(ID) can be used to silence specific warnings.
Supplying an id of 0 will silence all warnings.

There is currently no documentation for PyGLM.
Please refer to the source (in Python: *.__doc__) and GLM manuals, references and tutorials.

Unsupported functions

Aside from the unstable extensions,
PyGLM doesn't support the following extensions and methods, due to compatibility issues:
The GLM_GTC_bitfield extension,
glm::log2 from GLM_GTC_integer.
glm::packUnorm and glm::packSnorm from GLM_GTC_packing.

Build options

PyGLM can be built from source in a couple of different ways.
In PyGLM.cpp there is a preprocessor option PyGLM_BUILD which is set to PyGLM_DEFAULT by default.
PyGLM_DEFAULT will build all of PyGLM's functions and features.

A few other flags exist:
PyGLM_FAST removes PyGLM's iterable and GetBuffer checking, thus making it incompatible with tuples, numpy arrays and bytes objects while increasing overall performance.

PyGLM_NO_FUNCTIONS removes all of the functions of glm and only builds the bare types.

PyGLM_MINIMAL combines PyGLM_FAST and PyGLM_NO_FUNCTIONS.

Example

>>> import glm
>>> v = glm.vec3()
>>> v.x = 7
>>> print(v.xxy)
vec3(            7,            7,            0 )

>>> m = glm.mat4()
>>> print(m)
[            1 |            0 |            0 |            0 ]
[            0 |            1 |            0 |            0 ]
[            0 |            0 |            1 |            0 ]
[            0 |            0 |            0 |            1 ]

>>> v = glm.vec4(1, 2, 3, 4)
>>> print(v + (8, 7, 6, 5))
vec4(            9,            9,            9,            9 )

Speed comparison to numpy

How PyGLM's performance roughly compares to NumPy's performance:
instruction     | np speed (%)  | glm speed (%)
import          |   4.76        |  100.00
mat4()          |   9.76        |  100.00
dot(vec3, vec3) |  28.92        |  100.00
transpose(mat4) |  25.64        |  100.00
vec4 * vec4     |  27.89        |  100.00
mat4 * vec4     |  17.68        |  100.00
mat4[0]         |  49.99        |  100.00

Metadata

Release files for pyglm 1.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyglm 1.1.4
File Size Uploaded
PyGLM-1.1.4.tar.gz 348.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pyglm 1.1.4
File
PyGLM-1.1.4-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
PyGLM-1.1.4-cp38-cp38-win32.whl CPython 3.8 CPython 3.8 Windows x86-32 Details
PyGLM-1.1.4-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details
PyGLM-1.1.4-cp37-cp37m-win32.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-32 Details
PyGLM-1.1.4-cp36-cp36m-win_amd64.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-64 Details
PyGLM-1.1.4-cp36-cp36m-win32.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-32 Details
PyGLM-1.1.4-cp35-cp35m-win_amd64.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-64 Details
PyGLM-1.1.4-cp35-cp35m-win32.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-32 Details

Total release size: 6.7 MB

Release files / PyGLM-1.1.4.tar.gz

Download URL PyGLM-1.1.4.tar.gz
Size 348.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3661f31083b5770890e8ad4d5192de58caada556cb2f013f48cf3cb08a71d6a7
BLAKE2b-256 checksum
How to use checksums
a10b4da88698fb06a3c8d753ffb940ba95a2729ce31665134a2ef7401bcc418d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp38-cp38-win_amd64.whl

Download URL PyGLM-1.1.4-cp38-cp38-win_amd64.whl
Size 866.6 kB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
3295b2582fac9802bbf2002cf9445d5b79677f807116a9258806766324c75132
BLAKE2b-256 checksum
How to use checksums
23a82bbe54913fbd27f2ae563176da282fe737fcc325b3e7fdb468b877f3f743
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp38-cp38-win32.whl

Download URL PyGLM-1.1.4-cp38-cp38-win32.whl
Size 734.3 kB
Tags CPython 3.8 Windows x86-32
SHA-256 checksum
How to use checksums
c7e0df52ed8ad58e1da00634124fb9411668f8722069fe688c182c432cd6303d
BLAKE2b-256 checksum
How to use checksums
19f8ef9fff31c4c78359c80c8b2e0bd764b895945f7ec4840411d1736b8e67c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp37-cp37m-win_amd64.whl

Download URL PyGLM-1.1.4-cp37-cp37m-win_amd64.whl
Size 860.9 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
09e684b907c3426283836ddadad812adfa3b5ff5e0197beb957353559ba3fddc
BLAKE2b-256 checksum
How to use checksums
011f3c36a46b888b6f85360ebf7259be8724e609cb2d1c4f4c10210a5ab943ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp37-cp37m-win32.whl

Download URL PyGLM-1.1.4-cp37-cp37m-win32.whl
Size 732.0 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
55799ff0575d61e7325ab479746e58d54816e722890d036fdbc9dfd621d1425c
BLAKE2b-256 checksum
How to use checksums
e1142970b087a0c034c550671805e242d8352b96de278ddba350a580001b9777
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp36-cp36m-win_amd64.whl

Download URL PyGLM-1.1.4-cp36-cp36m-win_amd64.whl
Size 860.9 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
40327cd833846cad52dc510377d37046b68ede3cc5e329fcd0a1de59fa828173
BLAKE2b-256 checksum
How to use checksums
07b15086bb1fc996961bbcabb064ab9c7cace09950a0b0005f8b2a3533605451
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp36-cp36m-win32.whl

Download URL PyGLM-1.1.4-cp36-cp36m-win32.whl
Size 732.0 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
a28b1926ec36c20e369da398b4ed0eaa0d8e9fe083eb8c53db4c69568f98d1d4
BLAKE2b-256 checksum
How to use checksums
2062259a7d131314e818eb00b65a5063b75f368152fe126edf78f30125cdc38f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp35-cp35m-win_amd64.whl

Download URL PyGLM-1.1.4-cp35-cp35m-win_amd64.whl
Size 869.5 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
cc226d761b829544c877150539abfd159f1167d079c8f75cae20ecf93cacb49d
BLAKE2b-256 checksum
How to use checksums
dcc7885c48b986e7c1f4973ba3fabd79030657a1a6e4b5740cc7b57f8ecd980a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release files / PyGLM-1.1.4-cp35-cp35m-win32.whl

Download URL PyGLM-1.1.4-cp35-cp35m-win32.whl
Size 716.4 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
96392e7868c4655bd5a6c61654f7666db07837b62d0e4bc7ee5d49b3daf45ce3
BLAKE2b-256 checksum
How to use checksums
0e8e0333b8a80591ae26040ad9374b2880d341c2e9fb1999fabe09461a354578
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

Release history Release notifications | RSS feed

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page