Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI Documentation Dependencies crates.io Downloads License

egui-sdl2

egui on SDL2: SDL2 event handling plus three swappable rendering backends behind one consistent API.

egui-sdl2 demo

Why egui-sdl2?

  • Three rendering backends, one API. Software (Canvas), OpenGL (glow), and WebGPU (wgpu) — pick one with a feature flag and use the same on_event / run / paint loop for all of them.
  • Tracks the latest egui. Kept in step with current egui releases so you are not stuck on an old version.
  • Built on the official design. Mirrors the structure of the upstream egui-winit, egui_glow, and egui-wgpu crates, so the API feels familiar and behaves predictably.
  • Batteries included. Translates SDL2 events into egui events and handles egui::PlatformOutput (clipboard, cursor updates, opening links). Both egui and sdl2 are re-exported for convenience, and the sdl2 re-export forwards all of SDL2's feature flags.

Rendering backends

Enable exactly what you need via feature flags:

  • canvas-backend — software rendering via Canvas
  • glow-backend — OpenGL via glow
  • wgpu-backend — WebGPU via wgpu

Usage

// Create SDL2 window:
let sdl = sdl2::init().unwrap();
let video = sdl.video().unwrap();
let window = video.window("Egui SDL2 Canvas", 800, 600).build().unwrap();
// Create egui renderer:
let mut egui = egui_sdl2::EguiCanvas::new(window);
let mut event_pump = sdl.event_pump().unwrap();
loop {
    // Feed SDL2 events into egui:
    for event in event_pump.poll_iter() {
        egui.on_event(&event);
    }
    // Call `run` + `paint` each frame:
    egui.run(|ctx: &egui::Context| {});
    egui.paint();
    egui.present();
    std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0));
}

To get started, create an EguiGlow, EguiCanvas, or EguiWgpu instance to manage rendering. Pass SDL2 events to on_event, then call run and paint each frame. For event handling only, you can use the State type.

Examples are available in the examples/ directory. To run the canvas example:

cargo run --example canvas

License

Licensed under either of Apache License 2.0 or MIT license at your option.

About

egui integration for SDL2 — event handling with software, OpenGL, and wgpu rendering backends

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages