Skip to main content

ModernGL: High performance rendering for Python 3

Project description



[![preview](https://github.com/cprogrammer1994/ModernGL/raw/master/.github/preview.png)](#readme)



# ModernGL

```sh
pip install ModernGL
```

- [Documentation](https://moderngl.readthedocs.io/)
- [Examples](https://github.com/cprogrammer1994/ModernGL/tree/master/examples/#readme)
- [ModernGL on Github](https://github.com/cprogrammer1994/ModernGL/)
- [ModernGL on PyPI](https://pypi.org/project/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

```py
>>> 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](https://github.com/cprogrammer1994/ModernGL/tree/master/examples/#readme).

## Easy to use with Pillow and Numpy

```py
>>> img = Image.open('texture.jpg')
>>> ctx.texture(img.size, 3, img.tobytes())
<Texture: 1>
```

```py
>>> ctx.buffer(np.array([0.0, 0.0, 1.0, 1.0], dtype='f4'))
<Buffer: 1>
```

## Compared to PyOpenGL

With the original OpenGL API you have to write a couple of lines to achieve a **simple task** like compiling a shader or running a computation on the GPU. With ModernGL you will need just a **few lines** to achieve the same result.

#### Using PyOpenGL

```py
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)
```

#### Using ModernGL

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

## Build

[![build](https://img.shields.io/travis/cprogrammer1994/ModernGL/master.svg?label=build)](https://travis-ci.org/cprogrammer1994/ModernGL)
[![build](https://img.shields.io/appveyor/ci/cprogrammer1994/ModernGL/master.svg?label=build)](https://ci.appveyor.com/project/cprogrammer1994/ModernGL)

```sh
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.

[standalone_context]: https://github.com/cprogrammer1994/ModernGL/tree/master/examples/standalone

### 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.

[PyQt5]: https://pypi.org/project/PyQt5/
[pyglet]: https://bitbucket.org/pyglet/pyglet/wiki/Home
[pygame]: https://www.pygame.org/news
[GLUT]: https://wiki.python.org/moin/PyOpenGL

### Limitations using ModernGL over PyOpenGL?

All the neccessary 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](https://github.com/cprogrammer1994/ModernGL/issues) or raise a [PR](https://github.com/cprogrammer1994/ModernGL/pulls).

## Supported platforms

- [x] Windows
- [x] Linux
- [x] Mac

## Installing from source

### Installing on Ubuntu from source

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

### Building the sphinx documentation

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

### Running tests

```sh
pytest
```

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

### Headless rendering

```sh
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]

[pep8]: https://www.python.org/dev/peps/pep-0008/
[flake8]: http://flake8.pycqa.org/en/latest/
[prospector]: https://prospector.landscape.io/en/master/
[pylint]: https://www.pylint.org/

## Community

- [Code of conduct](https://github.com/cprogrammer1994/ModernGL/blob/master/.github/CODE_OF_CONDUCT.md)

## Contributors

- [Szabolcs Dombi](https://github.com/cprogrammer1994)
- [SimLeek](https://github.com/SimLeek)
- [Aljenci](https://github.com/Aljenci)
- [MinchinWeb](https://github.com/MinchinWeb)
- [Silexstudio](https://github.com/Silexstudio)
- [stuaxo](https://github.com/stuaxo)
- [Tomi Aarnio](https://github.com/toaarnio)
- [Joshua Reibert](https://github.com/joshua-r)

and [many others](https://github.com/cprogrammer1994/ModernGL/graphs/contributors)

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.2.0.tar.gz (100.5 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.2.0-cp36-cp36m-win_amd64.whl (104.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

moderngl-5.2.0-cp36-cp36m-win32.whl (91.2 kB view details)

Uploaded CPython 3.6mWindows x86

moderngl-5.2.0-cp36-cp36m-manylinux1_x86_64.whl (604.3 kB view details)

Uploaded CPython 3.6m

moderngl-5.2.0-cp36-cp36m-manylinux1_i686.whl (567.1 kB view details)

Uploaded CPython 3.6m

moderngl-5.2.0-cp36-cp36m-macosx_10_6_intel.whl (221.8 kB view details)

Uploaded CPython 3.6mmacOS 10.6+ Intel (x86-64, i386)

moderngl-5.2.0-cp35-cp35m-win_amd64.whl (108.7 kB view details)

Uploaded CPython 3.5mWindows x86-64

moderngl-5.2.0-cp35-cp35m-win32.whl (95.7 kB view details)

Uploaded CPython 3.5mWindows x86

moderngl-5.2.0-cp35-cp35m-manylinux1_x86_64.whl (604.5 kB view details)

Uploaded CPython 3.5m

moderngl-5.2.0-cp35-cp35m-manylinux1_i686.whl (567.2 kB view details)

Uploaded CPython 3.5m

moderngl-5.2.0-cp35-cp35m-macosx_10_6_intel.whl (221.8 kB view details)

Uploaded CPython 3.5mmacOS 10.6+ Intel (x86-64, i386)

moderngl-5.2.0-cp34-cp34m-macosx_10_6_intel.whl (221.8 kB view details)

Uploaded CPython 3.4mmacOS 10.6+ Intel (x86-64, i386)

File details

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

File metadata

  • Download URL: moderngl-5.2.0.tar.gz
  • Upload date:
  • Size: 100.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for moderngl-5.2.0.tar.gz
Algorithm Hash digest
SHA256 adea5338c1218585fd468b77ba98844104a297baf54137db98701ff98faf4328
MD5 2357063a77d73f8bb165bd1dee31aeef
BLAKE2b-256 cab135c7dba6639e61442a14f054e88d99ea2a1c81ac29b0992f08d4251e012c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moderngl-5.2.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d95403d5f53bf3af29e3953e5ed71de7a748ad22ca401dde7a86fc84e7cec2c3
MD5 c3a09f6bd45acafd47172a4f97fb74b1
BLAKE2b-256 9521051ab50afa1bb33143a1207e106d4099446ee792f247a918b0fca6977479

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moderngl-5.2.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 beb3d8890d4a4a6a6b83dca4f117e1b96de8a9cdbdc05ef60f78aee2bb615f71
MD5 7c0f3f1b99e5abb46e37b9295bd82b04
BLAKE2b-256 cdf95fca27404e7f5df61bb7a8ab927309c803bdfe09ff1056b5dfea3e569f09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moderngl-5.2.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 55aa4a50f734fb1fae2c7a0297a77b5aa1884b85a760dec2cb7c52c93455fe63
MD5 429b97ac4134936608482830889e770c
BLAKE2b-256 ddd1b1cedd3a87c79ed4a1951c8bd4bd37418d0fb7da70f63094506ea80c5667

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moderngl-5.2.0-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 0fc25d5641525aabac0f8619b5a66a2b2a40705cde8860aaeae760fcd95dce14
MD5 db06410e4fc3e1dc271b605fefc1a115
BLAKE2b-256 bcc92cbb79fb4c0d5b07d1ddedd6878b09a36b45683be8b55729eff8a965ea62

See more details on using hashes here.

File details

Details for the file moderngl-5.2.0-cp36-cp36m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for moderngl-5.2.0-cp36-cp36m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 eb762d26b08b2b554be846ecb031a876727d58b392a9cb91a3d5029830cc3306
MD5 9eaeaba016471a71c2f1c6077fafc750
BLAKE2b-256 84e3893f53e03b6d7aa5f01f86242f91b30f35b79a7f5b071edc94650e50f0b8

See more details on using hashes here.

File details

Details for the file moderngl-5.2.0-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for moderngl-5.2.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 4668707f1ce553ff2b26616dd78f6e62ff74ef4773638223cacc65a75f4f26da
MD5 ad3926f202f28037c0535f765013849a
BLAKE2b-256 2a058ed8a61bd6952ef3949d3e48402d185ff6225a8d06695c722c74a4821e1c

See more details on using hashes here.

File details

Details for the file moderngl-5.2.0-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for moderngl-5.2.0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 29b12d811624d812e0efa2297abb297599a6b7ba33b66bb24395755f4b9e5e27
MD5 a0b4c3ad29f59f0250a2c88d69059683
BLAKE2b-256 8857dd1c4afe8c476f1f4a6f880d9577013c5a8e16f86669325c55b570453344

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moderngl-5.2.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ee5bcbb063fab205337e916aff11a6590e50a78bfec13cfa81eafc5164e62973
MD5 52d73bf8debd33f7441e7123bbc23fab
BLAKE2b-256 0bf4920bd8d8ea6677af5df0a87d17d4ff3f211f96bb38dcfae78843b8a47702

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moderngl-5.2.0-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 9451c75b3913f53e03b47ec9a61d70c057a217b7dff61394b5fb8bc4aabb17bd
MD5 19ad0acba79d9d2940731f5a447f004b
BLAKE2b-256 62022976bbc4e3357a8af7227c9ba131df11dfe6ab936085a3a293484ce73fbc

See more details on using hashes here.

File details

Details for the file moderngl-5.2.0-cp35-cp35m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for moderngl-5.2.0-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 190753b9f399e43bf63a9e05bc085b6bb06650052103e9f75c46a5d5f976036c
MD5 43104c646444bd51cfeddded841688b9
BLAKE2b-256 0ee953f7ff7dd22b9984dea90746ea15e49387c9305551b291b3b6802735466c

See more details on using hashes here.

File details

Details for the file moderngl-5.2.0-cp34-cp34m-macosx_10_6_intel.whl.

File metadata

File hashes

Hashes for moderngl-5.2.0-cp34-cp34m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 0385f576c70a43f237d89ef58e631c80872bcb7644993a64a0e743c0f797cdb3
MD5 e81bb126e8decdb79a3ce43330d4317f
BLAKE2b-256 0fa4cb6480ccf32c5cc3223f5fd34de57f9b91ebc9b95dbb3e1aa170eaaed5e9

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