Skip to main content

Compact Python OpenGL rendering library

Project description

ZenGL

ZenGL

pip install zengl

Concept

ZenGL provides a simple way to render from Python. We aim to support headless rendering first, rendering to a window is done by blitting the final image to the screen. By doing this we have full control of what we render. The window does not have to be multisample, and it requires no depth buffer at all.

read more...

Examples

pip install zengl[examples]

grass.py

grass

envmap.py

envmap

normal_mapping.py

normal_mapping

rigged_objects.py

rigged_objects

instanced_crates.py

instanced_crates

julia_fractal.py

julia_fractal

blending.py

blending

render_to_texture.py

render_to_texture

pybullet_box_pile.py

pybullet_box_pile

pygmsh_shape.py

pygmsh_shape

texture_array.py

texture_array

monkey.py

monkey

reflection.py

reflection

polygon_offset.py

polygon_offset

blur.py

blur

hello_triangle.py

hello_triangle

hello_triangle_srgb.py

hello_triangle_srgb

viewports.py

viewports

points.py

points

wireframe_terrain.py

wireframe_terrain

crate.py

crate

sdf_example.py

sdf_example

sdf_tree.py

sdf_tree

mipmaps.py

mipmaps

conways_game_of_life.py

conways_game_of_life

Headless

import zengl
from PIL import Image

ctx = zengl.context(zengl.loader(headless=True))

size = (1280, 720)
image = ctx.image(size, 'rgba8unorm', samples=1)

triangle = ctx.pipeline(
    vertex_shader='''
        #version 330

        out vec3 v_color;

        vec2 positions[3] = vec2[](
            vec2(0.0, 0.8),
            vec2(-0.6, -0.8),
            vec2(0.6, -0.8)
        );

        vec3 colors[3] = vec3[](
            vec3(1.0, 0.0, 0.0),
            vec3(0.0, 1.0, 0.0),
            vec3(0.0, 0.0, 1.0)
        );

        void main() {
            gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0);
            v_color = colors[gl_VertexID];
        }
    ''',
    fragment_shader='''
        #version 330

        in vec3 v_color;

        layout (location = 0) out vec4 out_color;

        void main() {
            out_color = vec4(v_color, 1.0);
        }
    ''',
    framebuffer=[image],
    topology='triangles',
    vertex_count=3,
)

image.clear_value = (1.0, 1.0, 1.0, 1.0)
image.clear()
triangle.render()

Image.frombuffer('RGBA', size, image.read(), 'raw', 'RGBA', 0, -1).save('hello.png')

Type Hints

linting_01

linting_02

linting_03

linting_04

linting_05

linting_06

linting_07

Not Working?

It is a known issue that at the moment on linux with venv the pyi file is not distributed properly.

To fix this issue please download the zengl.pyi file and place it either in you project's root or next to the zengl binary. To locate the installation just inspect zengl.__file__.

>>> import zengl
>>> zengl.__file__
'...'

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

zengl-1.8.4.tar.gz (34.6 kB view hashes)

Uploaded Source

Built Distributions

zengl-1.8.4-pp39-pypy39_pp73-win_amd64.whl (39.7 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.8.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.2 kB view hashes)

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

zengl-1.8.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (46.1 kB view hashes)

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

zengl-1.8.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (39.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.8.4-pp38-pypy38_pp73-win_amd64.whl (39.7 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.8.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.2 kB view hashes)

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

zengl-1.8.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (46.1 kB view hashes)

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

zengl-1.8.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (39.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.8.4-pp37-pypy37_pp73-win_amd64.whl (39.7 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.8.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.6 kB view hashes)

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

zengl-1.8.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (46.6 kB view hashes)

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

zengl-1.8.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (39.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.8.4-cp310-cp310-win_amd64.whl (39.5 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

zengl-1.8.4-cp310-cp310-win32.whl (34.3 kB view hashes)

Uploaded CPython 3.10 Windows x86

zengl-1.8.4-cp310-cp310-musllinux_1_1_x86_64.whl (112.4 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

zengl-1.8.4-cp310-cp310-musllinux_1_1_i686.whl (105.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

zengl-1.8.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (107.7 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zengl-1.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (101.9 kB view hashes)

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

zengl-1.8.4-cp310-cp310-macosx_10_9_x86_64.whl (41.0 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

zengl-1.8.4-cp39-cp39-win_amd64.whl (39.6 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

zengl-1.8.4-cp39-cp39-win32.whl (34.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

zengl-1.8.4-cp39-cp39-musllinux_1_1_x86_64.whl (111.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

zengl-1.8.4-cp39-cp39-musllinux_1_1_i686.whl (104.6 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

zengl-1.8.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (107.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zengl-1.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (101.6 kB view hashes)

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

zengl-1.8.4-cp39-cp39-macosx_10_9_x86_64.whl (41.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

zengl-1.8.4-cp38-cp38-win_amd64.whl (39.6 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

zengl-1.8.4-cp38-cp38-win32.whl (34.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

zengl-1.8.4-cp38-cp38-musllinux_1_1_x86_64.whl (113.9 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

zengl-1.8.4-cp38-cp38-musllinux_1_1_i686.whl (106.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

zengl-1.8.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (108.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zengl-1.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (102.9 kB view hashes)

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

zengl-1.8.4-cp38-cp38-macosx_10_9_x86_64.whl (41.0 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

zengl-1.8.4-cp37-cp37m-win_amd64.whl (39.5 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

zengl-1.8.4-cp37-cp37m-win32.whl (34.3 kB view hashes)

Uploaded CPython 3.7m Windows x86

zengl-1.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl (110.3 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

zengl-1.8.4-cp37-cp37m-musllinux_1_1_i686.whl (102.7 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

zengl-1.8.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (104.5 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zengl-1.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (98.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zengl-1.8.4-cp37-cp37m-macosx_10_9_x86_64.whl (40.8 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

zengl-1.8.4-cp36-cp36m-win_amd64.whl (41.0 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

zengl-1.8.4-cp36-cp36m-win32.whl (35.3 kB view hashes)

Uploaded CPython 3.6m Windows x86

zengl-1.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl (109.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

zengl-1.8.4-cp36-cp36m-musllinux_1_1_i686.whl (101.8 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

zengl-1.8.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (104.5 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

zengl-1.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (98.4 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

zengl-1.8.4-cp36-cp36m-macosx_10_9_x86_64.whl (40.8 kB view hashes)

Uploaded CPython 3.6m 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