Skip to main content

OpenGL Pipelines for Python

Project description

ZenGL

pip install zengl

ZenGL

ZenGL is a low level graphics library. Works on all platforms including the browser.

Description

  • Context is the root object to access OpenGL
  • Image is an OpenGL Textures or OpenGL Renderbuffer
  • Buffer is an OpenGL Buffer
  • Pipeline is an OpenGL Program + OpenGL Vertex Array + OpenGL Framebuffer + complete state for rendering
ctx = zengl.context()
texture = ctx.image(size, 'rgba8unorm', pixels)
renderbuffer = ctx.image(size, 'rgba8unorm', samples=4)
vertex_buffer = ctx.buffer(vertices)
pipeline = ctx.pipeline(...)

The complete OpenGL state is encapsulated by the Pipeline.

Rendering with multiple pipelines guarantees proper state with minimal changes and api calls.

background.render()
scene.render()
particles.render()
bloom.render()

Pipelines render to framebuffers, Images can be blit to the screen.

# init time
pipeline = ctx.pipeline(
    framebuffer=[image, depth],
)
# per frame
image.clear()
depth.clear()
pipeline.render()
image.blit()

Programs are simple, easy, and cached. Unique shader sources are only compiled once.

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

        void main() {
            gl_Position = ...
        }
    ''',
    fragment_shader='''
        #version 330 core

        out vec4 frag_color;

        void main() {
            frag_color = ...
        }
    ''',
)

Vertex Arrays are simple.

# simple
pipeline = ctx.pipeline(
    vertex_buffers=zengl.bind(vertex_buffer, '3f 3f 2f', 0, 1, 2),
    vertex_count=vertex_buffer.size // zengl.calcsize('3f 3f 2f'),
)
# indexed
pipeline = ctx.pipeline(
    vertex_buffers=zengl.bind(vertex_buffer, '3f 3f 2f', 0, 1, 2),
    index_buffer=index_buffer,
    vertex_count=index_buffer.size // 4,
)
# instanced
pipeline = ctx.pipeline(
    vertex_buffers=[
        *zengl.bind(vertex_buffer, '3f 3f 2f', 0, 1, 2),
        *zengl.bind(instance_buffer, '3f 4f /i', 3, 4),
    ],
    vertex_count=vertex_buffer.size // zengl.calcsize('3f 3f 2f'),
    instance_count=1000,
)

Uniform Buffer, Texture, and Sampler binding is easy.

# uniform buffers
pipeline = ctx.pipeline(
    layout=[
        {
            'name': 'Common',
            'binding': 0,
        },
    ],
    resources=[
        {
            'type': 'uniform_buffer',
            'binding': 0,
            'buffer': uniform_buffer,
        },
    ],
)
# textures
pipeline = ctx.pipeline(
    layout=[
        {
            'name': 'Texture',
            'binding': 0,
        },
    ],
    resources=[
        {
            'type': 'sampler',
            'binding': 0,
            'image': texture,
            'wrap_x': 'clamp_to_edge',
            'wrap_y': 'clamp_to_edge',
            'min_filter': 'nearest',
            'mag_filter': 'nearest',
        },
    ],
)

Postprocessing and Compute can be implemented as rendering a fullscreen quad.

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

        vec2 vertices[3] = vec2[](
            vec2(-1.0, -1.0),
            vec2(3.0, -1.0),
            vec2(-1.0, 3.0)
        );

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

        out vec4 frag_color;

        void main() {
            frag_color = ...
        }
    ''',
    topology='triangles',
    vertex_count=3,
)
particle_system = ctx.pipeline(
    fragment_shader='''
        #version 330 core

        uniform sampler2D Position;
        uniform sampler2D Velocity;
        uniform vec3 Acceleration;

        layout (location = 0) out vec3 OutputPosition;
        layout (location = 1) out vec3 OutputVelocity;

        void main() {
            OutputPosition = Position + Velocity;
            OutputVelocity = Velocity + Acceleration;
        }
    ''',
)

ZenGL intentionally does not support:

  • Transform Feedback
  • Geometry Shaders
  • Tesselation
  • Compute Shaders
  • 3D Textures
  • Storage Buffers

Most of the above can be implemented in a more hardware friendly way using the existing ZenGL API. Interoperability with other modules is also possible. Using such may reduce the application's portablity. It is even possible to use direct OpenGL calls together with ZenGL, however this is likely not necessary.

It is common to render directly to the screen with OpenGL. With ZenGL, the right way is to render to a framebuffer and blit the final image to the screen. This allows fine-grained control of the framebuffer format, guaranteed multisampling settings, correct depth/stencil precison. It is also possible to render directly to the screen, however this feature is designed to be used for the postprocessing step.

This design allows ZenGL to support:

  • Rendering without a window
  • Rendering to multiple windows
  • Rendering to HDR monitors
  • Refreshing the screen without re-rendering the scene
  • Apply post-processing without changing how the scene is rendered
  • Making reusable shaders and components
  • Taking screenshots or exporting a video

The default framebuffer in OpenGL is highly dependent on how the Window is created. It is often necessary to configure the Window to provide the proper depth precision, stencil buffer, multisampling and double buffering. Often the "best pixel format" lacks all of these features on purpose. ZenGL aims to allow choosing these pixel formats and ensures the user specifies the rendering requirements. It is even possible to render low-resolution images and upscale them for high-resolution monitors. Tearing can be easily prevented by decoupling the scene rendering from the screen updates.

ZenGL was designed for Prototyping

It is tempting to start a project with Vulkan, however even getting a simple scene rendered requires tremendous work and advanced tooling to compile shaders ahead of time. ZenGL provides self-contained Pipelines which can be easily ported to Vulkan. ZenGL code is verbose and easy to read.

ZenGL support multiple design patters

Many libraries enfore certain design patterns. ZenGL avoids this by providing cached pipeline creation, pipeline templating and lean resourece and framebuffer definition. It is supported to create pipelines on the fly or template them for certain use-cases.

TODO: examples for such patters

ZenGL emerged from an experimental version of ModernGL. To keep ModernGL backward compatible, ZenGL was re-designed from the ground-up to support a strict subset of OpenGL. On the other hand, ModernGL supports a wide variety of OpenGL versions and extensions.

Disambiguation

  • ZenGL is a drop-in replacement for pure OpenGL code
  • Using ZenGL requires some OpenGL knowledge
  • ZenGL Images are OpenGL Texture Objects or OpenGL Renderbuffer Objects
  • ZenGL Buffers are OpenGL Buffer Objects
  • ZenGL Pipelines contain an OpenGL Vertex Array Object, an OpenGL Program Object, and an OpenGL Framebuffer Object
  • ZenGL Pielines may also contain OpenGL Sampler Objects
  • Creating ZenGL Pipelines does not necessarily compile the shader from source
  • The ZenGL Shader Cache exists independently from the Pipeline objects
  • A Framebuffer is always represented by a Python list of ZenGL Images
  • There is no Pipeline.clear() method, individual images must be cleared independently
  • GLSL Uniform Blocks and sampler2D objects are bound in the Pipeline layout
  • Textures and Uniform Buffers are bound in the Pipeline resources

Examples

bezier_curves deferred_rendering envmap fractal grass normal_mapping rigged_objects wireframe

Simple Pipeline Definition

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-2.5.1.tar.gz (54.7 kB view details)

Uploaded Source

Built Distributions

zengl-2.5.1-cp312-cp312-win_amd64.whl (48.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

zengl-2.5.1-cp312-cp312-win32.whl (41.4 kB view details)

Uploaded CPython 3.12 Windows x86

zengl-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl (133.0 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

zengl-2.5.1-cp312-cp312-musllinux_1_2_i686.whl (124.5 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

zengl-2.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (136.2 kB view details)

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

zengl-2.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (125.4 kB view details)

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

zengl-2.5.1-cp312-cp312-macosx_11_0_arm64.whl (44.8 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

zengl-2.5.1-cp312-cp312-macosx_10_9_x86_64.whl (46.8 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

zengl-2.5.1-cp311-cp311-win_amd64.whl (47.9 kB view details)

Uploaded CPython 3.11 Windows x86-64

zengl-2.5.1-cp311-cp311-win32.whl (41.1 kB view details)

Uploaded CPython 3.11 Windows x86

zengl-2.5.1-cp311-cp311-musllinux_1_2_x86_64.whl (129.9 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

zengl-2.5.1-cp311-cp311-musllinux_1_2_i686.whl (122.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

zengl-2.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (132.6 kB view details)

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

zengl-2.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (123.0 kB view details)

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

zengl-2.5.1-cp311-cp311-macosx_11_0_arm64.whl (44.9 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

zengl-2.5.1-cp311-cp311-macosx_10_9_x86_64.whl (46.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

zengl-2.5.1-cp310-cp310-win_amd64.whl (47.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

zengl-2.5.1-cp310-cp310-win32.whl (41.1 kB view details)

Uploaded CPython 3.10 Windows x86

zengl-2.5.1-cp310-cp310-musllinux_1_2_x86_64.whl (129.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

zengl-2.5.1-cp310-cp310-musllinux_1_2_i686.whl (121.3 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

zengl-2.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (131.6 kB view details)

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

zengl-2.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (122.2 kB view details)

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

zengl-2.5.1-cp310-cp310-macosx_11_0_arm64.whl (44.9 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

zengl-2.5.1-cp310-cp310-macosx_10_9_x86_64.whl (46.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

zengl-2.5.1-cp39-cp39-win_amd64.whl (48.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

zengl-2.5.1-cp39-cp39-win32.whl (41.1 kB view details)

Uploaded CPython 3.9 Windows x86

zengl-2.5.1-cp39-cp39-musllinux_1_2_x86_64.whl (128.6 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

zengl-2.5.1-cp39-cp39-musllinux_1_2_i686.whl (120.9 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

zengl-2.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (131.1 kB view details)

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

zengl-2.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (121.7 kB view details)

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

zengl-2.5.1-cp39-cp39-macosx_11_0_arm64.whl (44.9 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

zengl-2.5.1-cp39-cp39-macosx_10_9_x86_64.whl (46.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

zengl-2.5.1-cp38-cp38-win_amd64.whl (48.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

zengl-2.5.1-cp38-cp38-win32.whl (41.1 kB view details)

Uploaded CPython 3.8 Windows x86

zengl-2.5.1-cp38-cp38-musllinux_1_2_x86_64.whl (131.2 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

zengl-2.5.1-cp38-cp38-musllinux_1_2_i686.whl (123.4 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

zengl-2.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (134.2 kB view details)

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

zengl-2.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (124.8 kB view details)

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

zengl-2.5.1-cp38-cp38-macosx_11_0_arm64.whl (44.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

zengl-2.5.1-cp38-cp38-macosx_10_9_x86_64.whl (46.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

Details for the file zengl-2.5.1.tar.gz.

File metadata

  • Download URL: zengl-2.5.1.tar.gz
  • Upload date:
  • Size: 54.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1.tar.gz
Algorithm Hash digest
SHA256 2ae2def480cbbfcfaf5cbfec14e050603205bfe931e11f2f693d9e897c8e6e02
MD5 bfe388e442acb3cfd5831480079ecbc9
BLAKE2b-256 29833cc1f68402db3d16dcceecbf6efdf8b87f8d0c06c3f81e8c517986ed669c

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: zengl-2.5.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 48.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6af370aa6cfee5a2bd868a352eac7ae39d9672c264608b67801997da0af487e7
MD5 8525794b8d26e618d81e5b7cd31f671a
BLAKE2b-256 15c56b2b4f52bb397271bca854192b3cd0719842164333000bfb751c49c09312

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-win32.whl.

File metadata

  • Download URL: zengl-2.5.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 41.4 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a551734fbd6e475ad585982a3a19be30182ce5f70b5c202b8052c974bf3a84d6
MD5 58a061f9ba87ef7a6e3a93332414dcb9
BLAKE2b-256 618a78adea5aa224ea2fae6a4c1aa09c92553054d5683449e29fb18f99c4f923

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 928821a614cc3a535d287528d48f47a02bd7e9b9718c7d8c7003f1881ce0a6de
MD5 ea09157807cd2af5a8e1ae872d0b88c2
BLAKE2b-256 74655f11c68362901a4b5aff57570eb93d6f1c4e08f6d500f092c88f7a5ad5cd

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 134b19aadf455ab8ecc47d8828777e6f3375331536d19529ce11a59163e8e336
MD5 1de39d37b3bcc189b09522c2dceeff73
BLAKE2b-256 c36d3a862b9d12d85e203df5eabe2a3bf92ce7e84afb14aba71fa9481ab20ac2

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 43e3d8d8f59eae0f524835d8ddd12a62c10cfcda74fc1cc58beaf6a7ffb34694
MD5 03c0c2d467e55e0f25e671ceda4e8545
BLAKE2b-256 787042b9e6ddca8d4a243273529257b5b2693e6a06a4ab0e79aba414143c28fe

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 167fd64b7b3165c9d29d9462f5949ed1a7ac4ec75ad9159fa90fb8bab26d4cf6
MD5 d428d6013fcfe25082d7ebf79d6f7133
BLAKE2b-256 7e0d8386ccd833f4b4737d33927462c0c81c86e25c103ae6d4cd6fee81c0f89e

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 583287fc5418e8c114eeb01d6fc86aca0bd126ffbb14562f71d7df3c9907a8f3
MD5 af771c4c56e6f4e9ba88bd88b120108c
BLAKE2b-256 27d99c667794c003f82e8b6a16b589e7878c379f20b573f3679c41cfcedad309

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 80407a6d8d46d42447fe9a7a5e385322cc247756903bc1872e1f5668dc3e9113
MD5 489e8372316486cb0e3154bea4a89e12
BLAKE2b-256 b8eaccfb5543af5c9c481577bba1b539c30310b3b0ffa4f5afc28f72beeb7364

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: zengl-2.5.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 47.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a3b1f3fdb05553554ff3129a1d815f99efd4e8176dc5092eff809768df6a308a
MD5 bf8062434e9b9f8d8eece3dba94ee259
BLAKE2b-256 66cbc3107656021393dc82d085900cd6ef4463708caf7d7d508281d9dd6ce18a

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-win32.whl.

File metadata

  • Download URL: zengl-2.5.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 b637a1e0f9ac2e6c7089c2394db7f0be0b8816df11573a1687a89fe45397f1b0
MD5 4bd785c24c279b4c5f489df36559bcfd
BLAKE2b-256 d6ea8c8e1d269f6199f7789ca0a7183caf225fa0ca497ba7e09d3208feec6631

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3329cd0a11cf5f0b3f3d3e9e30e1613150b8de8da83725710a326f79cd933746
MD5 d233aa8696af687a6f1743d7011a385e
BLAKE2b-256 007e9ad71567acd8588fc6f72b0229bb6c29e3f59fc70378a324ddcb2e84b6c7

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 2f4e6c7e201c0973a06555da73d8f528f26a2ae442cd715bd68ff15ff3261ce9
MD5 110c36b25ea146dedfb3cf3e4708a78a
BLAKE2b-256 c003d5294e13f289b3e81272c4de9572db53cc946a4624b90917b473be18c23c

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 511644f48374ac27fe5ce51c8fe4938dc6da8817039822bcd93dc6bc54e0b295
MD5 63e60b42f2fb7a0bcc672bb0bdbc55e5
BLAKE2b-256 638d281012c29f7d90becbfb3d3828646cd8765344b8b5553992395a5e07d17f

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 25292c7fcbc7b17bb6c6ef182dd4953de91f6ce10094f98ebf3a813e0ae5fcb5
MD5 2c5e8e51ebea6cab9cd45f40d3d4e368
BLAKE2b-256 ef175c83596d9d05ff6a41cc97709540ec913fe26cc9caeb911bedee420abd13

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae183b5c35269a2f0d6ad7e07d9ecd5384207abc19a0b662965a9ab609bd8587
MD5 e9073074428af0eb72c30af1172da374
BLAKE2b-256 301882e831138f3dd6467593d5ae9bf83845a81916bb21ab050a40c2d973df73

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 07f72690f336c2d6bad9e4563b530e3a594aff5d421b6e5359d0c215a5c657fd
MD5 c7385739cc0abc63ff36d983543202b5
BLAKE2b-256 a11b309c12ea8f32ab419d0ee233e7da6703caea1a54b24e6ddbb0b572e2e6fc

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: zengl-2.5.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 47.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 be0f37983d0d4cdaeed47b4a409610f9de6a0a5dd070db9581ffa82380e29016
MD5 cbb92c9e601669b65bd7ae493ad1de00
BLAKE2b-256 487b5c8e4160ff6eaba0219f533897aa498d939fffa7dcf51934b904a913d9cc

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-win32.whl.

File metadata

  • Download URL: zengl-2.5.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 c5d9771b6306b2bf7cadc6c71872e877f345c0e31e78a706773b910009d965aa
MD5 37059d1500a6780f09ca9d4687facf07
BLAKE2b-256 7bf015e1546c96b2a037bfe50ec5d47067e1ce634f455ad4c04fe0f2151f8fcf

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 52d261281849c50f0c9c305ce8866c3a24fca5160f2e3864a9a91869688cefde
MD5 5ce672510b9c4aeb627e350c1ad9e9b2
BLAKE2b-256 0ab339d88f74ad3ba4a9c7cd32cc8773c8e1c53a4eca7b6d50216ddd30820e0e

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 7236cb7a2e7073ad65e6b493c2c0bd4a87e50b8970dc4ab5195e9d610bb20537
MD5 cdb8636efa777a7b447281894b2af6c9
BLAKE2b-256 535246c4b398b4435c06e0009c5dba3eca828e9ca12c1c196bb8037c562850c1

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5048cb94414775e926fb60d7f2b35a0ee062d9948952c2e99e695889c6332148
MD5 ee0b9053fd0fc3f50447832039e069bc
BLAKE2b-256 e137f1a120542d32b5e5c49dbb3db02cb0a991bdfd890d6255e30fcb6c5a048c

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4f7deb0ea2b6ac84eb1059f567dd30e5ee529abc9494b5aecaaac701784668cf
MD5 2ba1965d2acb9527f9c9de2e43cc26b7
BLAKE2b-256 6f913916fbb3402c0cd9a5ea21e9e41946fea602b4bcf879cbc0f3e8b132813d

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e8f320ea15533c53e1f91fe010f17da45a8e7ec64915b240d1538fe19473d47
MD5 197363fd055f7ffe72623dac43e495a8
BLAKE2b-256 9703670ab0d19b37fea7ef96f1b093c7447508754a92abe49dd07fb4267f34a3

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fca40ea1dc797bce274c7bb6e200cdc7150a6e4d19f2fc066aada620ea3fc462
MD5 b2e21c5b325e47020b454ffe79d2d2c7
BLAKE2b-256 d9251a977b7427ddf64aea305f8463820ec3f6282c56e5c6ca71d325663eccae

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: zengl-2.5.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 48.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3fcc4ec8dd3dd0956f6dbb1e3eb8682016a737e43c8f1130d4b73ac1bbf7b5b5
MD5 acf8e84d119ae27d990726baf54d3041
BLAKE2b-256 3e09d6e3754f9b235ef4fe2ed33470e62d4b16cfaeeeaddd7ea5c58be007c20a

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-win32.whl.

File metadata

  • Download URL: zengl-2.5.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 ab2c9cca84a918e0f728cd374f9d0657ac83a858d7db94bd2573bda756f85da0
MD5 ce11faa3a78c2e558edb04541b64573f
BLAKE2b-256 7a35cc8b8a5fbf223a892eadc09382c7b42ab153c55471610214840417077546

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 efd994bfc0903ac2244229f800ac16335ff70dc8a7f482aabd4d3aff5e5b3b3c
MD5 ff2d9fc2a1fd5a09e0dab09bab68139e
BLAKE2b-256 b601b0f0282c8997826de67fa676734276219ba4363e8039e0a0ea6acea73a04

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 bd2b12359c9d621aba754d206507c2f4152133acca2a9b123787b6157a19c474
MD5 5990b5051b321d2d65e6f54bf5328015
BLAKE2b-256 02293f9514f2254946b1edcca796d6e58c15fabc1cacc18f1cbd5de015476f72

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f8b1c8deb083e3d1441ac61742c607c47e21f95bd4b0f5ea7b82125d235bff1
MD5 09dfc6631ad083817272cfe8eb88b0ab
BLAKE2b-256 9c7f785218da5e13c15c9cdc303706bb1f52d6c351b1974ede213b42c0653ffd

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c3f6fd5f3fa58be7668f75aeb6791bf9ccc9ccf4d741f39ee1d2ea9685182aef
MD5 6bb00a9670c32bb072d6a23e3e8e4670
BLAKE2b-256 08c300da71b5258e364ea62f0da96b84d3ab0dbe6098a57c61b3bda3e57b2e83

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c94c1f2fa3a55493af129812e93988c2781a143683e151ecc259a62bee95598f
MD5 6c4f5506ee5a2bbf2c9a8cc01237d569
BLAKE2b-256 9de3af2e9a48af248bd62766a66aa2d65bbd018ac06e1cd4c78521b05eadb424

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bdf4900863f6e8905699e588f99fedbc18dcf4961b5876a364bfc3b341ed665f
MD5 131ccb162028ae5a4406499b4777de18
BLAKE2b-256 6023baf1ae6adefa45bcad12024508f62a77639e3f58ced7657325c185de522b

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: zengl-2.5.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 48.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 a53d26459fc6dea5ad80e81f7a70fdb399b21ca1b567b0c8d7d68665e0567f48
MD5 a614ac2be75088ecd2a0eadfe97533a2
BLAKE2b-256 7f00aff3cb39a4085e6cc03d5f6aefa08d8ed644f1389fdc7ba77837f82ef2b5

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-win32.whl.

File metadata

  • Download URL: zengl-2.5.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for zengl-2.5.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 9023bdef085d45842df42535715a86869285d19448bfb23cadda8dd1f9ce1aad
MD5 760b52ba4c6a470fcad543cbfd19abba
BLAKE2b-256 3f45a3fa428bf7f7153f57f4dd90d86cbfc11792e173f116c118ab7062b80fe9

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2f1de8df704706224643a28f3cca7a06186c40b81fe87b118f2b642cbe0f3733
MD5 f9c910bb5b31ccb4b5ccb5ab14b271a5
BLAKE2b-256 3a66daeeac4a43176ec7b7478bc98ea74ec81569193fc8e9e2bbda6084ffd8ec

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 f2f9291b193db532f9d5070addb79299ab077ac4b1c6d66a391e90ecb0b1b706
MD5 ac25f3224de6a62bec12e142c25c40f5
BLAKE2b-256 1de64d5a6861ff9c988bae4f4f28a305132bb88802e6af4d471354d6ea570621

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91bccfc87f0645de879c5a1e963a1f5ddf487dbea7cfdaec43b4d1ba48891feb
MD5 25e017017f6075b64308907931918222
BLAKE2b-256 fda25b77d7bb32c122eec8137af4df249e1d05f0b7591b613505e3482bfa8d8e

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3e98892d0a13bdee3902bfdd8d40439603082d5377d95e8f2aadce9ae6e61068
MD5 478a17fb7a50a4b85941ca350b17423c
BLAKE2b-256 da8519d8e9997198de92b4dea123dfafa98cdd043a06f293f637b0464671e7e2

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19aca52f84af017d4757fd4c8d1442a07015e731df7054153639ad8725f03917
MD5 64692156ccee1f14ec5e936971bd491e
BLAKE2b-256 d3c55169e370dab8bf0b314a180362e39bbc9bb17adcc71af646d5df56d7efdb

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a93b92ca51284821d8c5cc719fe85c537c7374928825e3ce27e5998f25da7133
MD5 1e8ddb6193a7fae978a3f0c06f724db4
BLAKE2b-256 697e67fa4692d71e9eeebd9107190147df606ea58c53a39432f2a19e5ff7db96

See more details on using hashes here.

Provenance

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