A modular, flexible, and shader-based graphics library for Rust, built on wgpu.
Designed for real-time effects, transitions, and reactive graphics.
- Shader-Centric Design: Leverage the power of WGSL shaders for all effects and transitions, allowing for highly customizable and unique visual styles.
- WGPU-based: Hardware-accelerated rendering with support for Vulkan, Metal, DX12, and WebGPU (WASM).
- Modular Architecture: Build complex graphics pipelines using
GfxChain. - Reactive Parameter System: All effect parameters can be static, linked to thread-safe controls (
atomics), or driven by modulators (LFOs, Envelopes). - Flexibility: Swap shaders, chain effects, and modulate any parameter at runtime.
- Audio Integration: Built-in
AudioBridgeto easily drive graphics parameters from audio signals (e.g., frominfinitedsp-core). - Cross-platform: Designed from the start to work with WASM, Windows, Linux, and macOS.
- Current Effect Suite:
- Transitions: Crossfade, Flip, Warp, Space-Bend, Curtain.
- Effects: Glitch, Haze, Sparkle, Glass, Fade, Solid Color.
- Text: Basic text rendering (hard-coded minimal font) with support for animations (explosion, gravity, wipe, modulation).
- Modulators:
- LFO: RampingLfo, LinearSweep for periodic changes.
- Envelope: KickPumper for rhythmic reactivity.
- Audio: AudioBridge for connecting to audio levels.
src/core: Core components likeGfxChain,GfxParam,RenderContext, andGfxFrameProcessor.src/effects: Implementations of graphical effects and transitions.src/modulators: Modulators for controlling parameters over time or via external sources.src/backend: Management ofwgpuresources, devices, and surfaces.src/shaders: WGSL shaders for all effects and transitions.
Add infinitegfx-core to your dependencies.
use infinitegfx_core::core::gfx_chain::GfxChain;
use infinitegfx_core::effects::{glitch, haze, text::TextEffect};
use infinitegfx_core::modulators::lfo::RampingLfo;
use infinitegfx_core::StandardGlobals;
// Create an effect chain
let mut chain = GfxChain::new(format);
// Add a text effect with animation
let text = TextEffect::new("INFINITEGFX", 0.0, 10.0)
.with_pos(0.5, 0.5)
.with_explosion(RampingLfo::new(0.5, 1.0));
// Add glitch and haze
chain = chain
.and(text)
.and(glitch(0.2, 0.5))
.and(haze(0.1, 0.3));
// In your render loop:
let globals = StandardGlobals {
time,
res_x: width as f32,
res_y: height as f32,
..Default::default()
};
// Update global buffer and render
queue.write_buffer(globals_buf, 0, bytemuck::cast_slice(&[globals]));
chain.render(RenderContext {
device,
queue,
encoder,
target_view: view,
globals_bind_group,
globals_buf,
time,
input_view: None,
});To generate and view the API documentation:
cargo doc --openThis project encourages experimentation with AI agents for code generation and optimization. However, all AI-generated contributions must be strictly verified by a human maintainer. This verification includes:
- Code Review: Ensuring the code is idiomatic, safe, and follows project standards.
- Visual Verification: Checking the visual output to ensure correctness and graphical quality (no artifacts, correct shader behavior).
- Platform Support: Because this project targets multiple platforms, verification should be done on your native platform and ideally also via Google Chrome/WGPU.
This project is licensed under the MIT License - see the LICENSE file for details.