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 Texture or Renderbuffer
  • Buffer is an OpenGL Buffer
  • Pipeline is an OpenGL Program + Vertex Array + 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(
    vertex_shader=...,
    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() {
            ivec2 at = ivec2(gl_FragCoord.xy);
            vec3 position = texelFetch(Position, at, 0).xyz;
            vec3 velocity = texelFetch(Velocity, at, 0).xyz;
            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 Renderbuffer Objects
  • ZenGL Buffers are OpenGL Buffer Objects
  • ZenGL Pipelines contain an OpenGL Vertex Array Object, a Program Object, and a Framebuffer Object
  • ZenGL Pipelines 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.4.tar.gz (55.0 kB view details)

Uploaded Source

Built Distributions

zengl-2.5.4-cp313-cp313-win_amd64.whl (48.4 kB view details)

Uploaded CPython 3.13 Windows x86-64

zengl-2.5.4-cp313-cp313-musllinux_1_2_x86_64.whl (133.2 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

zengl-2.5.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (136.4 kB view details)

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

zengl-2.5.4-cp313-cp313-macosx_11_0_arm64.whl (45.0 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

zengl-2.5.4-cp313-cp313-macosx_10_13_x86_64.whl (46.9 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

zengl-2.5.4-cp312-cp312-win_amd64.whl (48.4 kB view details)

Uploaded CPython 3.12 Windows x86-64

zengl-2.5.4-cp312-cp312-musllinux_1_2_x86_64.whl (133.1 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

zengl-2.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (136.4 kB view details)

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

zengl-2.5.4-cp312-cp312-macosx_11_0_arm64.whl (45.0 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

zengl-2.5.4-cp312-cp312-macosx_10_9_x86_64.whl (47.0 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

zengl-2.5.4-cp311-cp311-win_amd64.whl (48.1 kB view details)

Uploaded CPython 3.11 Windows x86-64

zengl-2.5.4-cp311-cp311-musllinux_1_2_x86_64.whl (130.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

zengl-2.5.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (132.8 kB view details)

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

zengl-2.5.4-cp311-cp311-macosx_11_0_arm64.whl (45.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

zengl-2.5.4-cp311-cp311-macosx_10_9_x86_64.whl (46.8 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

zengl-2.5.4-cp310-cp310-win_amd64.whl (48.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

zengl-2.5.4-cp310-cp310-musllinux_1_2_x86_64.whl (129.2 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

zengl-2.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (131.8 kB view details)

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

zengl-2.5.4-cp310-cp310-macosx_11_0_arm64.whl (45.1 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

zengl-2.5.4-cp310-cp310-macosx_10_9_x86_64.whl (46.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: zengl-2.5.4.tar.gz
  • Upload date:
  • Size: 55.0 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.4.tar.gz
Algorithm Hash digest
SHA256 19848f13b28c91c923e9797e87484a3e2d008b8bd2b843bcbb8028838eb5bd71
MD5 882831f3d0406e56fb8758f045097a70
BLAKE2b-256 e6e96874f9e8307e75c37a9e4a92d5ec62073445921ce5a7d7997aabd1e9666b

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: zengl-2.5.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 48.4 kB
  • Tags: CPython 3.13, 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.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ff8c3470f0d806af6cc5eef6392bfc73b1e196ef3102c1e3523a13c9d060cb46
MD5 df2c819befbd2b1b0b189cdefe3a411e
BLAKE2b-256 761a3370f1ada9bf1ec7a680d9464788ff52552aa053b6c323abae2a1a662ed5

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1ba2e2e7632007a99a32b7fb650b66c2b77f99d954fa7f26696f0b19b3e57d10
MD5 7d89b1cb3b18ecd9806e78359695d715
BLAKE2b-256 d338fc3986b3ec94a8b403ce828a2f9ea8306ea02ae5e5269e6b632dd5803dd2

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-cp313-cp313-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.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3138ba843d4a9439822c42718916b0a4759f25eeba4e2532230f1848db68fb15
MD5 785fc83563cc59f1cc7cc427c4a66d8a
BLAKE2b-256 b4ada7ea46a76ab39fcb626820a422b5b2027b7f47554d808b1a5e26097e6a4e

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.5.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 81e5b9c37346a36a8cc6f67c6c54e5b8b5203fbbce1724e4e74b65cff1bf84ba
MD5 f236a6a0af02336b2f9c010fc15fc466
BLAKE2b-256 3d2c845aa834211fb2e3047ae74965ed0c86131866bf9df5160c0e1be0eb1eee

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.5.4-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 03bf93bbc04e5c79bb0d7efac98c430e7d36d32e1a7ca2073046ef083a807845
MD5 ab332121296acdb5eac53badcef54b2c
BLAKE2b-256 f5bd9466569b7700cf491e33f92255c37f0a2ac5c83f9f0fe2539bef992eec9c

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: zengl-2.5.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 48.4 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4f3c0f6aeea43a4f92277a7b3f4c0ac4f43807c789d35158af4b3adf525bee8c
MD5 e939210e6dd06db1a5cf9f2b78bbd4ff
BLAKE2b-256 343d2f47816897c7d675edb8d218b8efa2cf8744ec22dd137ec7614b73f34317

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6866d35276e90af95db62820607688c2ac1f3a7344545db316dcf172564edcd0
MD5 4aabb2ce1a7c9677896c30c83d3a6695
BLAKE2b-256 6e93772a40a6ddd2dbad0df1a167b81fc2ba1a34c938585e4110a7ebf3f8b4b2

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-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.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d1b79b8b093e3b49967da48377c859369a072c91b55a8ea8c60cf7d19b78dec3
MD5 498b9e9824cbeb34a1d03606afb1e9d1
BLAKE2b-256 fa990e38aa804314ef959aecbe05fe269d5ee32773486ea0b2a8ed8a8ce2de9e

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 baf647e3c8732ab28878d55256afc54b85b6b513c09ad2307d8801c722192af6
MD5 aacf652204814482b53a5720295309cf
BLAKE2b-256 6d6c1a1b5a58c60814a7366b59b2216be3b8e5e9da8ae7937b2b95ae38ef86a4

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c22057627f8b0aae468bac9b506aa03c8fe989ed9e8f50963d44a7b623ed5350
MD5 8c33bc16aab6783fe1d787ac6697d04f
BLAKE2b-256 48855b903ac0459ed392ef884ac940037fccc2c548910daef8fe84d596fa7936

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: zengl-2.5.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 48.1 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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 50b6491c7be94195c94b7707fc4edf9a4e967926835eec73a09fe558414d594c
MD5 db0fe4d28e8e53e6ea392f0c2188dacd
BLAKE2b-256 3b6c83ef587dd19cbe03b9d179edd999bbe7397d7d50ca2475cc883abbb00339

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4ff788ea4d03e62c8108fb54a079f777b3d59aa4f113f32f45e2c6008ce78c3f
MD5 409acbcfca739fcb6da9fa0fadeae625
BLAKE2b-256 88d0280f8aa2ab47031c21cbba6032f063fde715e015f9d73fcd9e5274b59ed9

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-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.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6e2472e8d766a0865d1e32988f6707c208882f8da62c2f31d524b9a973672d09
MD5 983d78e96b9531f17c738645330a9cf6
BLAKE2b-256 7b3a7d1c233766d5bea8543eb5252f1d330c174c4ca8f0d0d43b00f698d29828

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 306b49214a47f0f68d6ecc48f16880cb111556c0d953cf5fd5d8078e7d81dfbc
MD5 9be0fe662caa10d0119e45a74450eba7
BLAKE2b-256 54f5cdd48aa6bbc78e1b1aa34a5d81a6a0d4d873ec67ff24c81df98978ef6bfb

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2883a4dd2ef3e8f20cb9afcc7c3becf59ee00c2d21ed13b659245713b23372bd
MD5 27eff5f3bfdac96edc95799dd9907c46
BLAKE2b-256 833fed707d4e22448fe29e631d7efa11b3e25a32011a2fe008f43f14566fd9e2

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: zengl-2.5.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 48.1 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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 25cc69a6db27a7594ce43c2fef7590f778483b983fa652135f01dffa2e7c3db7
MD5 4785101f0819f948a0f4c5ff35059d9f
BLAKE2b-256 4d368778389bb7d83e7994cba6f957be668478b6c74f53990bc63c7b18c3e517

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8bd28999ba361a42cce19fddec19f6420985999134e030e300cd8488d241e7b8
MD5 2d362fe080a662e516f7132ace7e04a7
BLAKE2b-256 42cd3f0c866b92b4b6815432679d080bd53dd6ae29c7c99dafec4494561d33dc

See more details on using hashes here.

Provenance

File details

Details for the file zengl-2.5.4-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.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e73a07235ccbac0209d049321f5c4104e08702764ef94f36b409b7887e38e814
MD5 20e898d3d463710fd9bdae25b0b0ea13
BLAKE2b-256 942a97dcc8183f4bd33386e364c940b8dcc30db5e8e33856a0d7cfefac0a1b4a

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eb1814ed2c87754c90e6697469827846ea0477a431bd861b04afa0a89a81d2e3
MD5 659265743b5d22dc8ce9bd2ae75e2648
BLAKE2b-256 513be69857aa454e92d156f9dbf01bc732303c5f82915092effab3f829d71ecc

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for zengl-2.5.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ccefa5a79c7ece225c119eac800b4cbf6108cab000ffd2ae459c4e241c7241f5
MD5 52925ece7a51031faf975651547d52d6
BLAKE2b-256 af38e33b6c9daabc7a0407b101c46e96c15cc66c0a56ea07ab12e4a2a32a5148

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