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

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zengl-2.7.2-cp314-cp314t-win_amd64.whl (51.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

zengl-2.7.2-cp314-cp314t-musllinux_1_2_x86_64.whl (162.3 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

zengl-2.7.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (164.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

zengl-2.7.2-cp314-cp314t-macosx_11_0_arm64.whl (46.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

zengl-2.7.2-cp314-cp314t-macosx_10_13_x86_64.whl (48.5 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

zengl-2.7.2-cp314-cp314-win_amd64.whl (49.2 kB view details)

Uploaded CPython 3.14Windows x86-64

zengl-2.7.2-cp314-cp314-musllinux_1_2_x86_64.whl (140.0 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

zengl-2.7.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (141.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

zengl-2.7.2-cp314-cp314-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

zengl-2.7.2-cp314-cp314-macosx_10_13_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

zengl-2.7.2-cp313-cp313-win_amd64.whl (48.0 kB view details)

Uploaded CPython 3.13Windows x86-64

zengl-2.7.2-cp313-cp313-musllinux_1_2_x86_64.whl (140.5 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

zengl-2.7.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (141.8 kB view details)

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

zengl-2.7.2-cp313-cp313-macosx_11_0_arm64.whl (45.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zengl-2.7.2-cp313-cp313-macosx_10_13_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

zengl-2.7.2-cp312-cp312-win_amd64.whl (48.0 kB view details)

Uploaded CPython 3.12Windows x86-64

zengl-2.7.2-cp312-cp312-musllinux_1_2_x86_64.whl (140.5 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

zengl-2.7.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (141.7 kB view details)

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

zengl-2.7.2-cp312-cp312-macosx_11_0_arm64.whl (45.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zengl-2.7.2-cp312-cp312-macosx_10_13_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

zengl-2.7.2-cp311-cp311-win_amd64.whl (47.6 kB view details)

Uploaded CPython 3.11Windows x86-64

zengl-2.7.2-cp311-cp311-musllinux_1_2_x86_64.whl (135.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

zengl-2.7.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (136.7 kB view details)

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

zengl-2.7.2-cp311-cp311-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zengl-2.7.2-cp311-cp311-macosx_10_9_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

zengl-2.7.2-cp310-cp310-win_amd64.whl (47.6 kB view details)

Uploaded CPython 3.10Windows x86-64

zengl-2.7.2-cp310-cp310-musllinux_1_2_x86_64.whl (134.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

zengl-2.7.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (135.8 kB view details)

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

zengl-2.7.2-cp310-cp310-macosx_11_0_arm64.whl (45.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zengl-2.7.2-cp310-cp310-macosx_10_9_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: zengl-2.7.2.tar.gz
  • Upload date:
  • Size: 55.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2.tar.gz
Algorithm Hash digest
SHA256 f5fdecb76cd0c45cc82b53f02cd90ecc4d8c742924ccee48603080d0dcb58a81
MD5 8e59a24cf6b12b2107a00e4ea7c684e1
BLAKE2b-256 775be678bb03667e2177c30948291ae19b11591302ecf3677eb431dcf067d442

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.2-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 51.2 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 5f95cceab3e054a36c8060029518434297187ca291b2e6706e10217ea9862d5a
MD5 88ceab0619a3e395b0f24fce704df3f0
BLAKE2b-256 13f0adab48b1114239e5924899cd32e552cd692a6e7bdad055234a157ed220c6

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 075fc0e36ab6b1e0af5c4e6f61c6c5d4e998237ab36416d8142d3395de2054b6
MD5 2a382d8a68e4a120cbbeffabdaf240b8
BLAKE2b-256 308a3bde9f944ae5b8231f5197b8aca17cb28c6279de8eaee1dd753fc39773dd

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 8885703d44014b64f151beb925ad870e84a7f080889d6485fb398386f9ddb21d
MD5 7f04134f9f1dffd274d68b2073c5cb2d
BLAKE2b-256 9736826dc95318cf8222faaadf28013ddb8e3a072ab1138ea2be31695cafa549

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c403d803963660f15d417244ab35b9e0e46f2ba6a75af4013605a2bc411cfc2
MD5 ae010c6a91ef51ebe57ffc31f057ffa0
BLAKE2b-256 e7b0e3a250f9fed899a0b6535e790acfabdfe1c04a5be15dfcfedafb768d21c4

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1b4474f33530775e19f30bb28e7916ccaf87148e9de8c88a3e4abf9b5863e433
MD5 eef601852530fa23a11eacb403a00e06
BLAKE2b-256 9bfbd864b96ac7d61034662d3ae238c50048ce6025c453ece0fa23136b01ea0e

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: zengl-2.7.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 49.2 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9f27e3a9a65cb6fae26006627103a2de9b4e3545d55764cb20a404c9e2ed5430
MD5 4d3737e25a10590476cd4a3aa4e786ea
BLAKE2b-256 fb88f70b5c7b89ebe8869eb12ac28f2cac47b333a3dbd70d1f36bbfeeb69d6b5

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d4540233e62e4d860ac88875ae6a2cd5eedda16ff48c798c2fbdcf8ec211b680
MD5 0cdce3d2bbf406ce2cb72ebe2af7877c
BLAKE2b-256 dee600cb3e1be0669d80bf99ea641cd8c6fe5e63274dba0b834183d4e8e21876

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a1ece5f8ac95fe63ee1687128f064babe8bfdfe8155aed4361254290fcdaca27
MD5 a3842670f8a857a5fd10625a4bbeb2e7
BLAKE2b-256 220d05800ba18725f2a0687640d5f696e996c7bda5db1695ba8763ca93dbd5a9

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 99ee3864adb176aa6452106032d52a91b1dc4d9d8a90557d0fcfe93d629fb479
MD5 1caa2ff939b769fb4309bb54ac294786
BLAKE2b-256 2f741b197f02b58eb98fb090aeea6fd053c0b10cd61a33f6c00f427eca4b8867

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp314-cp314-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b10867ec90cb5cf548426d003914327c03bf94b78486dcdea23afd657b937ff0
MD5 b7d12ceb13aff19e97a6add0c5a9c9a1
BLAKE2b-256 122f7f09722bcc9a80d279bbf49e6b9eb173ece95057491d7f7a1be574257279

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zengl-2.7.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 48.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a7d153a170a9632546b4590be0f9b698bc46cf96850a408b0a2a01c24b26daf8
MD5 5c5fca74085f876923f166a7996aa977
BLAKE2b-256 26c1334792d5034d45736d98d295c0307822bde4ac8bb0d40b91790abb6b774d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eb0a10a78cfca0edbb06309a43b7b42ab5cbd2954b434849acb75bb24ea58399
MD5 8d280e45b3105e068181975346feeb19
BLAKE2b-256 c40faf35659eece5398c09e61ffd01177d5da7cdc3d946e02a7e7d8ff0513f11

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 69c1238283bc88bf653de180adc9cd051d3ee34d7dd1583144d960cd18cbb027
MD5 63b42d40509f06d4b4e33f45a4b3027e
BLAKE2b-256 9c544a6323817237f3f19ad8728dd15741cdfe015a6fbb8201dd8db6cb332cac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7a0159e44c7a31d59672627b42b47661a1b5538c7d05f912d03bb07a2cee0c92
MD5 36af3a3902eddc0a7434ca6c53f06a87
BLAKE2b-256 f5fb5d5675f656b91bb78b0eef9c5c5d990c1efce921c9826890a442719f885c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 971c22cd7db70ed4c2b41c0d6159ead2b43166956637148700d38aef2dc3b2b6
MD5 66af19a0ff05612bc5434e891b0b29be
BLAKE2b-256 09126c7a764aa27c27159048a78a98a8eb89e35f3891db10bd816aa56c124f33

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zengl-2.7.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 48.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bd90013b42feff728b29a6875461547e31a2d2247def6e2b9c0943660aaabcab
MD5 f64d5ef9451faf6d09bd9d9271f7d3bc
BLAKE2b-256 2d90359d86da767aaa7c6d43e5b8a95a73f3cd132eea88907e51374f142cb641

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4fdacddbddc055541ee5f83c179a354154b6b88a85e7702e782afb4a0353e6f1
MD5 ed35ef34402df9ec36361c7e50cfcf0b
BLAKE2b-256 14165ee361d1c1955f2bdfb7de8edcbb440c83b0c887063bd9547bd9c40a7685

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 7edbd5cbec13057c1c0917de03d640767c1a1d2885d517e4d2c708234a532f2b
MD5 7cc600a487124d068b19a216d1974f99
BLAKE2b-256 a4ed1c55d6140bb1f1c2ec25125cf4657df8670df939e0ec99ed4d091ed46aa9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 edbdb1c30a88b18539e9dfd22d5e07f7831cc709331e4746bc5642a83bb30c21
MD5 7a8c904e7685357497bb6e01c5b5a71e
BLAKE2b-256 4539e9ab9ed5e8e060cb6e867b9484acc2b2f8471e8128a973d176368af01c17

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d227d508fe46588d919757f2339380cfcdfdf6a58f5441afbfa6a7bd992a584e
MD5 ce263ae63a176bfc0b4ee56adcfddf4e
BLAKE2b-256 a857952a226f0889f36b538ee06589f4892f2527e1bc1385d49361989a1089ad

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zengl-2.7.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 47.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 da64c4777acfc5a2274a7550621e459888076d2cc9d17267ff000d18a6b80018
MD5 d7ba14e2cbf90fcf4ac8affe48409165
BLAKE2b-256 56c9d90af0dc1dcbc809ae44f8b2cdb30aaf93a803f249efab3c566decfd7c78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2478f06d26cdf19aba4e867b1f04294f69a1716eae4fe319de3d68b3fb6ef7a8
MD5 c86fa07abd8bc057f794741d006407a6
BLAKE2b-256 72b44c69386ec71fb1ff5abca9272e854743f530a5e980e8cd46ed23a622020f

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 57fa637960db9c9081d857261ff1b9462e640b7de8a2f251d5e3a955f06fc502
MD5 3f9b0277c7841cb5fdc09d4b0b921d15
BLAKE2b-256 7c7190ce33241fac2f24b0374561cb4183babd801dcd23699e5fc7c029e89f30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b87f013f64ac8b9a848cfd8ccaf528aa8dccb5e6ee4894d90f808d72ebd711ba
MD5 e051eff149f89015ff1faee770c24150
BLAKE2b-256 3f626d97df20d6d7c8cc8ee93649ce497e3360a2ea7083af3ea78bdcbcd5efcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d7390509182ef34bef7d4bf6320a7b205b906732a7641cc99721bbc3bc4c10e3
MD5 fa66023aac800f8d52369663e5bcf3e2
BLAKE2b-256 85e381b05c65553ff46694484c8b83c2576055838e6c88cb3de9d5c4ef8aaac0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zengl-2.7.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 47.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for zengl-2.7.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 204bb512146232265ecee2e2cc775f55ca92c54122894dc55126a9b452d75b7a
MD5 8086de45b195102dc95bd2ffc915f67f
BLAKE2b-256 40af170471c083c63edc420d1be7b23f64916a3f9d955e681a1b5babaf7427a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c6688c6d2a4eaed61ee167eacc32ffa859609e3501af7da2fa9ed8d48383c69a
MD5 322950016d27328e56a3846990d94435
BLAKE2b-256 136fba52a28f2ed2d91fc93722691bdcbecea8e6a7dea4c0e41620969b41defe

See more details on using hashes here.

File details

Details for the file zengl-2.7.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for zengl-2.7.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 76760fd56f561209236e419c6ee2efe3fd2708a95f8a6ac15f3c440da8f9b2b5
MD5 196f8d569fc61863f3d6acf223dbe71b
BLAKE2b-256 57c38d21b3a970db9917a9e1c075546a1a57f8a2089e81b9632624183f7c3f0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5843cdae58f4d8f6d682ae0a2e1c0c8f351cffbf25f0970cbf562183c77bd6c2
MD5 774ebf9efe2b2210b07ebe9a2fb9421b
BLAKE2b-256 687506844f93ad1921cef182f563a037db557b3f8e6c370b4ee4be6969aaa9f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zengl-2.7.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4abfb5ebb974598a33bb9031d1d00bd4434a3abaec88a0ca4c426c0920b25ff
MD5 bde146dfe6644346a5e6fd14c7a9fabe
BLAKE2b-256 01d5eb992b73d7ee06163678e9159acbda74695d31f30651aebace7e88094a21

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