Skip to main content

Self-Contained OpenGL Rendering Pipelines for Python

Project description

ZenGL

ZenGL

pip install zengl

Concept

ZenGL provides a simple, structured way to render with OpenGL in Python.

Pipelines are self-contained, no global state affects the render.

State changes between pipelines are optimized; framebuffers, descriptor sets are re-used.

ZenGL is a low level library, it adds no magic on the rendering side. All you need to know is OpenGL.

ZenGL runs Natively (Desktop OpenGL), on top of Angle (DirectX, Vulkan, Metal), or WebGL2 (In the Browser).

Examples

ZenGL also works from the Browser (In-Browser Examples)

Native Examples

pip install -r examples/requirements.txt
python examples/example_browser.py

bezier_curves deferred_rendering envmap fractal grass normal_mapping rigged_objects wireframe

Complete Pipeline Definition

Probably the only documentation needed.

pipeline = ctx.pipeline(
    # program definition
    vertex_shader='...',
    fragment_shader='...',
    layout=[
        {
            'name': 'Uniforms',
            'binding': 0,
        },
        {
            'name': 'Texture',
            'binding': 0,
        },
    ],

    # descriptor sets
    resources=[
        {
            'type': 'uniform_buffer',
            'binding': 0,
            'buffer': uniform_buffer,
        },
        {
            'type': 'sampler',
            'binding': 0,
            'image': texture,
        },
    ],

    # uniforms
    uniforms={
        'color': [0.0, 0.5, 1.0],
        'iterations': 10,
    },

    # program definition global state
    depth={
        'func': 'less',
        'write': False,
    },
    stencil={
        'front': {
            'fail_op': 'replace',
            'pass_op': 'replace',
            'depth_fail_op': 'replace',
            'compare_op': 'always',
            'compare_mask': 1,
            'write_mask': 1,
            'reference': 1,
        },
        'back': ...,
        # or
        'both': ...,
    },
    blend={
        'enable': True,
        'src_color': 'src_alpha',
        'dst_color': 'one_minus_src_alpha',
    },
    cull_face='back',
    topology='triangles',

    # framebuffer
    framebuffer=[color1, color2, ..., depth],
    viewport=(x, y, width, height),

    # vertex array
    vertex_buffers=[
        *zengl.bind(vertex_buffer, '3f 3f', 0, 1), # bound vertex attributes
        *zengl.bind(None, '2f', 2), # unused vertex attribute
    ],
    index_buffer=index_buffer, # or None
    short_index=False, # 2 or 4 byte intex
    vertex_count=...,
    instance_count=1,
    first_vertex=0,

    # override includes
    includes={
        'common': '...',
    },
)

# some members are actually mutable and calls no OpenGL functions
pipeline.viewport = ...
pipeline.vertex_count = ...
pipeline.uniforms['iterations'][:] = struct.pack('i', 50) # writable memoryview

# rendering
pipeline.render() # no parameters for hot code

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.14.0.tar.gz (43.3 kB view hashes)

Uploaded Source

Built Distributions

zengl-1.14.0-pp310-pypy310_pp73-win_amd64.whl (40.8 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.14.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.0 kB view hashes)

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

zengl-1.14.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (44.5 kB view hashes)

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

zengl-1.14.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (39.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.14.0-pp39-pypy39_pp73-win_amd64.whl (40.8 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.14.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.0 kB view hashes)

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

zengl-1.14.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (44.4 kB view hashes)

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

zengl-1.14.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (39.8 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.14.0-pp38-pypy38_pp73-win_amd64.whl (40.8 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.14.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.9 kB view hashes)

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

zengl-1.14.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (44.4 kB view hashes)

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

zengl-1.14.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (39.8 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.14.0-pp37-pypy37_pp73-win_amd64.whl (40.8 kB view hashes)

Uploaded PyPy Windows x86-64

zengl-1.14.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.9 kB view hashes)

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

zengl-1.14.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (44.4 kB view hashes)

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

zengl-1.14.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (39.8 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

zengl-1.14.0-cp312-cp312-win_amd64.whl (40.9 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

zengl-1.14.0-cp312-cp312-win32.whl (35.8 kB view hashes)

Uploaded CPython 3.12 Windows x86

zengl-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl (126.1 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

zengl-1.14.0-cp312-cp312-musllinux_1_1_i686.whl (121.0 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

zengl-1.14.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (122.3 kB view hashes)

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

zengl-1.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (115.3 kB view hashes)

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

zengl-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl (41.3 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

zengl-1.14.0-cp311-cp311-win_amd64.whl (40.7 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

zengl-1.14.0-cp311-cp311-win32.whl (35.8 kB view hashes)

Uploaded CPython 3.11 Windows x86

zengl-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl (122.5 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

zengl-1.14.0-cp311-cp311-musllinux_1_1_i686.whl (118.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

zengl-1.14.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (118.6 kB view hashes)

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

zengl-1.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (112.1 kB view hashes)

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

zengl-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl (41.2 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

zengl-1.14.0-cp310-cp310-win_amd64.whl (40.7 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

zengl-1.14.0-cp310-cp310-win32.whl (35.8 kB view hashes)

Uploaded CPython 3.10 Windows x86

zengl-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl (120.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

zengl-1.14.0-cp310-cp310-musllinux_1_1_i686.whl (116.6 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

zengl-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (116.9 kB view hashes)

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

zengl-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (110.5 kB view hashes)

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

zengl-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl (41.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

zengl-1.14.0-cp39-cp39-win_amd64.whl (40.8 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

zengl-1.14.0-cp39-cp39-win32.whl (35.8 kB view hashes)

Uploaded CPython 3.9 Windows x86

zengl-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl (120.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

zengl-1.14.0-cp39-cp39-musllinux_1_1_i686.whl (116.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

zengl-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (116.5 kB view hashes)

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

zengl-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (110.2 kB view hashes)

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

zengl-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl (41.2 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

zengl-1.14.0-cp38-cp38-win_amd64.whl (40.8 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

zengl-1.14.0-cp38-cp38-win32.whl (35.8 kB view hashes)

Uploaded CPython 3.8 Windows x86

zengl-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl (123.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

zengl-1.14.0-cp38-cp38-musllinux_1_1_i686.whl (119.6 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

zengl-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (118.9 kB view hashes)

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

zengl-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (112.4 kB view hashes)

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

zengl-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl (41.2 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

zengl-1.14.0-cp37-cp37m-win_amd64.whl (40.7 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

zengl-1.14.0-cp37-cp37m-win32.whl (35.7 kB view hashes)

Uploaded CPython 3.7m Windows x86

zengl-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl (117.2 kB view hashes)

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

zengl-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl (112.8 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

zengl-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112.5 kB view hashes)

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

zengl-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (105.7 kB view hashes)

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

zengl-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl (41.0 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

zengl-1.14.0-cp36-cp36m-win_amd64.whl (43.5 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

zengl-1.14.0-cp36-cp36m-win32.whl (37.6 kB view hashes)

Uploaded CPython 3.6m Windows x86

zengl-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl (116.3 kB view hashes)

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

zengl-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl (111.9 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

zengl-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (112.5 kB view hashes)

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

zengl-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (105.7 kB view hashes)

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

zengl-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl (41.0 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