Skip to content

Latest commit

 

History

History
94 lines (64 loc) · 8.48 KB

File metadata and controls

94 lines (64 loc) · 8.48 KB

Shader Binary Release crates.io

cuneus sdf

A tool for experimenting with WGSL shaders, it uses wgpu for rendering, egui for the UI and winit for windowing :-)

Current Features

  • Hot shader reloading
  • Multi-pass, atomics etc
  • 3DGS Rendering Inference (PLY Import, radix gpu sort)
  • Interactive parameter adjustment, ez media imports through egui
  • Easily use HDR textures, videos/webcam via UI
  • Audio/Visual synchronization: Spectrum and BPM detection
  • Real-time audio synthesis: Generate music directly from wgsl shaders
  • Export HQ frames via egui

Builder Pattern

Cuneus uses a declarative builder to configure your entire compute pipeline. You say what you need — the engine handles all bind group layouts, ping-pong buffers, and pipeline wiring:

// Define your multi-pass pipeline as a dependency graph:
let passes = vec![
    PassDescription::new("buffer_a", &[]),                       // no inputs
    PassDescription::new("buffer_b", &["buffer_a"]),             // reads buffer_a
    PassDescription::new("buffer_c", &["buffer_b", "buffer_c"]),  // reads buffer_b + own previous frame
    PassDescription::new("main_image", &["buffer_c"]),
];

let config = ComputeShader::builder()
    .with_multi_pass(&passes)           // the render graph above
    .with_custom_uniforms::<MyParams>() // UI-controllable parameters
    .with_mouse()                       // mouse input
    .build();

Dependencies are packed sequentially — &["buffer_b", "buffer_c"] becomes input_texture0 and input_texture1 in WGSL. Self-reference enables cross-frame feedback (ping-pong) automatically. One .dispatch() call runs the entire pipeline. See usage.md for the full guide.

Current look

Cuneus IDE Interface

Keys

  • F full screen/minimal screen, H hide egui

Usage

  • If you want to try your own shaders, check out the usage.md and see BUILD.md.
  • Optional Media Support: GStreamer dependencies are optional - use --no-default-features for lightweight builds with pure GPU compute shaders.
  • When using cuneus as a dependency (via cargo add):
    • Add bytemuck = { version = "1", features = ["derive"] } to dependencies (derive macros can't be re-exported)
    • Copy build.rs to your project root to configure GStreamer paths (only needed for media features)
    • then simply use use cuneus::prelude::*;

Run examples

  • cargo run --release --example *file*
  • Or download on the releases

Gallery

Sinh3D JFA Volumetric Passage

Code

Code

Code
PathTracing Mandelbulb CNN:EMNIST Tame Impala

Code

Code

Code
Buddhabrot FFT(Butterworth filter) Clifford

Code

Code

Code
Block Tower: 3D Game System 2d Gaussian Splatting

Code

Code

Code
SDneuron path tracer audio visualizer

Code

Code

Code
sdvert tree rorschach

Code

Code

Code