livesplit-renderer-glow
A GPU-accelerated renderer for livesplit-core using OpenGL via glow.
Features
- GPU-accelerated rendering of livesplit-core layout scenes via OpenGL.
- 4x MSAA antialiasing on all rendered content.
- Two-layer caching: the bottom layer (backgrounds, static elements) is rendered to an off-screen framebuffer and reused across frames when unchanged.
- Gradient fills: solid, vertical, and horizontal gradients are handled natively in the fragment shader.
- Text rendering via livesplit-core's built-in text engine, with optional text shadows.
- Lazy texture upload: images are decoded on the CPU and uploaded to the GPU only when first drawn.
- Path tessellation via lyon at creation time for efficient per-frame rendering.
Usage
use livesplit_renderer_glow::GlowRenderer;
use std::sync::Arc;
// During setup (with a current GL context):
let mut renderer = unsafe { GlowRenderer::new(gl) }.unwrap();
// Each frame:
let new_size = unsafe { renderer.render(&layout_state, &image_cache, [width, height]) };
// On shutdown:
unsafe { renderer.destroy() };Requirements
- OpenGL 3.1+ (GLSL 1.40)
- A valid, current OpenGL context wrapped in
Arc<glow::Context>
Dependencies
| Crate | Purpose |
|---|---|
| livesplit-core | Layout state, scene management, text engine |
| glow | OpenGL bindings |
| lyon | Path tessellation |
| bytemuck | Safe byte reinterpretation for GPU uploads |
| image | PNG/JPEG decoding |
License
Licensed under either of
at your option.
Contributing
Contributions are welcome! Please open an issue or pull request on GitHub.
On this page
Languages
Rust100.0%
Contributors
Apache License 2.0
Created February 23, 2026
Updated February 24, 2026