Skip to main content

ModernGL: High performance rendering for Python 3

Project description

preview

ModernGL

pip install moderngl

Features

  • GPU accelerated high quality graphics
  • Rendering modern OpenGL scenes with less headache
  • Simpler and faster than PyOpenGL
  • Can render without a window
  • 100% Pythonic

Sample usage

>>> import moderngl
>>> ctx = moderngl.create_standalone_context()
>>> buf = ctx.buffer(b'Hello World!')  # allocated on the GPU
>>> buf.read()
b'Hello World!'

For complete examples please visit the Examples.

Easy to use with Pillow and Numpy

>>> img = Image.open('texture.jpg')
>>> ctx.texture(img.size, 3, img.tobytes())
<Texture: 1>
>>> ctx.buffer(np.array([0.0, 0.0, 1.0, 1.0], dtype='f4'))
<Buffer: 1>

Compared to PyOpenGL

With PyOpenGL, using the original OpenGL API, you have to write three lines to achieve a simple task like binding a VBO:

vbo1 = glGenBuffers(1)
GL.glBindBuffer(GL_ARRAY_BUFFER, vbo1)
GL.glBufferData(GL_ARRAY_BUFFER, b'Hello World!', GL_STATIC_DRAW)

vbo2 = glGenBuffers(1)
GL.glBindBuffer(GL_ARRAY_BUFFER, vbo2)
GL.glBufferData(GL_ARRAY_BUFFER, b'\x00' * 1024, GL_DYNAMIC_DRAW)

With ModernGL you need just one simple line per VBO to achieve the same results:

vbo1 = ctx.buffer(b'Hello World!')
vbo2 = ctx.buffer(reserve=1024, dynamic=True)

Build

build build

python setup.py build_ext --inplace

FAQ

Is ModernGL faster than PyOpenGL?

In some cases yes, the core functions of ModernGL are written in C++, OpenGL functions are called in quick succession so these calls together count as a single python function call.

What version of OpenGL is used?

Most of the calls only require OpenGL 3.3 but Subroutines and Compute Shaders require OpenGL 4.0 and OpenGL 4.3

Is my old PC supported?

OpenGL 3.3 came out in February 2010. With up to date drivers you will be able to use the most of the ModernGL functions, even on integrated graphics cards. (No, Compute Shaders won't work)

Where can I use ModernGL?

Anywhere where OpenGL is supported. ModernGL is capable of rendering using a standalone_context as well. Rendering to a window only requires a valid OpenGL context.

Can ModernGL create a Window?

NO, Window creation is up to you. You can choose from a large variety of modules that can create a window: PyQt5, pyglet, pygame, GLUT and many others.

We currently have example windows you can use or look at in the standard example system currently supporting PyQt5, GLFW, SDL2 and Pyglet (1.x).

Limitations using ModernGL over PyOpenGL?

All the necessary calls are (or can be) implemented in ModernGL. However you can interract with the ModernGL objects from PyOpenGL. If something is missing write an issue or raise a PR.

Supported platforms

  • Windows
  • Linux
  • Mac

Installing from source

Installing on Ubuntu from source

apt-get install python3-dev libgl1-mesa-dev libx11-dev
python3 setup.py install

Building the sphinx documentation

pip install -r docs/requirements.txt
python setup.py build_sphinx

Running tests

pip install -r tests/requirements.txt
pytest tests

Some of the tests may be skipped when the supported OpenGL version is below the requirements of the given test.

Headless rendering

apt-get install xvfb
alias xpy='xvfb-run -s "-screen 0 1x1x24" python3'
xpy -m ModernGL

Code quality

Code is tested with pep8, flake8, prospector and pylint

Community

Contributors

and many others

Thank You!

Contributions are welcome. (Please add yourself to the list)

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

moderngl-5.5.1.tar.gz (175.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

moderngl-5.5.1-cp37-cp37m-win_amd64.whl (175.7 kB view details)

Uploaded CPython 3.7mWindows x86-64

moderngl-5.5.1-cp37-cp37m-win32.whl (146.1 kB view details)

Uploaded CPython 3.7mWindows x86

moderngl-5.5.1-cp37-cp37m-manylinux1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7m

moderngl-5.5.1-cp37-cp37m-manylinux1_i686.whl (1.2 MB view details)

Uploaded CPython 3.7m

moderngl-5.5.1-cp36-cp36m-win_amd64.whl (175.6 kB view details)

Uploaded CPython 3.6mWindows x86-64

moderngl-5.5.1-cp36-cp36m-win32.whl (146.1 kB view details)

Uploaded CPython 3.6mWindows x86

moderngl-5.5.1-cp36-cp36m-manylinux1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6m

moderngl-5.5.1-cp36-cp36m-manylinux1_i686.whl (1.2 MB view details)

Uploaded CPython 3.6m

moderngl-5.5.1-cp35-cp35m-manylinux1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.5m

moderngl-5.5.1-cp35-cp35m-manylinux1_i686.whl (1.2 MB view details)

Uploaded CPython 3.5m

File details

Details for the file moderngl-5.5.1.tar.gz.

File metadata

  • Download URL: moderngl-5.5.1.tar.gz
  • Upload date:
  • Size: 175.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1.tar.gz
Algorithm Hash digest
SHA256 74de53bbc62db5d4908cd48e3dc876383fc9e777aa0cc7a1737c211c17817ff6
MD5 65e22e54c8fc95af403fdebd8e6764c4
BLAKE2b-256 9b6e89e4ebb6cc48d116fdcac770c87010a55b51825668abbc51716ddcf7f350

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 175.7 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 53821fee84f9e02a31578ae789735e0e423c6dfcb23fe8d11fd1426ed72cc47c
MD5 b0e38bfe9b8e35c69d74944dd19f11f9
BLAKE2b-256 5de3c79773dbf142cfaa051ad8d83bbdd7194ffc9a3a806e5f7e6cc393d3719b

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp37-cp37m-win32.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 146.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 cc996d91456a8ce62930379e75aa88de304035b71ff412cf8684a3142ec405e1
MD5 1cf2b6d5a8978268f3aae9972df3af84
BLAKE2b-256 6136ec934b9b3daa658826898dc27ad0551bc3d71aad7d872608d5f639cf7e30

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 52804dc476e31b42694f63ac44c0c313a43bbcd8448921e1ad51585e195d4f28
MD5 205adf2de60229fb2afff87f68f705b6
BLAKE2b-256 d1d05e1c5c1377e25d54fb80fd327eabec6ec563f2ee081f1fbc0d9685126187

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 f6aca7b1062361eee7d96d68dfca7822f1b103bdb723cea69892534ffcfc4ab8
MD5 4f4a8b3af9362b8bccc28f8e25ada798
BLAKE2b-256 20be6dade2dc85572f6f86e795f017b87334514a56097a3d1e7cdbdd746b8851

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 175.6 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 3bb410027290021b1ed192660d856af943d17d0bb4ce1cf21b7c67245d4f5e37
MD5 b07a4757cfd77f16d8a346cf873e9481
BLAKE2b-256 88389ae73b3cb185b476a39245c50ad4414119c962ec6dc60bfa4f9b09a7dede

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp36-cp36m-win32.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 146.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 82254de64de40fe93dbc8feacd0dccddbfcec14fd3f8e0941f5f3753a4e7a613
MD5 1adbdce897b0fb832b5c9892f0caedd6
BLAKE2b-256 37394d7f9c04195294d47f0e565cfa4dee1b05b3ddee7b673a371d6de1a1b54e

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9cfef4c670aa1766577e7b0b8dc1dd36747964dac0ba6dbee6441c6e317cce3f
MD5 30b3c3e02a081b9f3110a826a94890c0
BLAKE2b-256 3d503488dc1633b539a15a0fa5e37f84f81779dbfb53941b56a15a08b0d1ad8f

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 01096c839690b4d079b46fcac4d71d92ec0818dc9d3f85453dd8d12ce89f9ccb
MD5 e40f62d122bf8c80137a7b5485bebfa2
BLAKE2b-256 82fb3348cdda48e94466291d049cfce4fc859494a0d48b3fb944e0e52f7bacf6

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4243433e8475e9bb761decbfa7052ac9053d35a6aa6a586bf2e62da449e5e29d
MD5 d509ee5301baf540c6bee163faeea315
BLAKE2b-256 d2f0d0eac5fb1fc2e401f6b4cca320f1902805809ef4c86500d575476270a011

See more details on using hashes here.

File details

Details for the file moderngl-5.5.1-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: moderngl-5.5.1-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for moderngl-5.5.1-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 49782a7b730e93d74e0ee325db2ce632a1b441cbaf8ca97b215647b0b8abadb9
MD5 db766ba75f3bcb0500202f40916ebc71
BLAKE2b-256 3a319ebb8d49ee86008bfb97773b601cc79e8f6ae34ee19a1cd611e19e0e7056

See more details on using hashes here.

Supported by

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