//! Example how to use `egui_glium`. #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release use glium::glutin; fn main() { let event_loop = glutin::event_loop::EventLoop::with_user_event(); let display = create_display(&event_loop); let mut egui_glium = egui_glium::EguiGlium::new(&display); event_loop.run(move |event, _, control_flow| { let mut redraw = || { let mut quit = false; let needs_repaint = egui_glium.run(&display, |egui_ctx| { egui::SidePanel::left("my_side_panel").show(egui_ctx, |ui| { ui.heading("Hello World!"); if ui.button("Quit").clicked() { quit = true; } }); }); *control_flow = if quit { glutin::event_loop::ControlFlow::Exit } else if needs_repaint { display.gl_window().window().request_redraw(); glutin::event_loop::ControlFlow::Poll } else { glutin::event_loop::ControlFlow::Wait }; { use glium::Surface as _; let mut target = display.draw(); let color = egui::Rgba::from_rgb(0.1, 0.3, 0.2); target.clear_color(color[0], color[1], color[2], color[3]); // draw things behind egui here egui_glium.paint(&display, &mut target); // draw things on top of egui here target.finish().unwrap(); } }; match event { // Platform-dependent event handlers to workaround a winit bug // See: https://github.com/rust-windowing/winit/issues/987 // See: https://github.com/rust-windowing/winit/issues/1619 glutin::event::Event::RedrawEventsCleared if cfg!(windows) => redraw(), glutin::event::Event::RedrawRequested(_) if !cfg!(windows) => redraw(), glutin::event::Event::WindowEvent { event, .. } => { use glutin::event::WindowEvent; if matches!(event, WindowEvent::CloseRequested | WindowEvent::Destroyed) { *control_flow = glutin::event_loop::ControlFlow::Exit; } egui_glium.on_event(&event); display.gl_window().window().request_redraw(); // TODO(emilk): ask egui if the events warrants a repaint instead } _ => (), } }); } fn create_display(event_loop: &glutin::event_loop::EventLoop<()>) -> glium::Display { let window_builder = glutin::window::WindowBuilder::new() .with_resizable(true) .with_inner_size(glutin::dpi::LogicalSize { width: 800.0, height: 600.0, }) .with_title("egui_glium example"); let context_builder = glutin::ContextBuilder::new() .with_depth_buffer(0) .with_srgb(true) .with_stencil_buffer(0) .with_vsync(true); glium::Display::new(window_builder, context_builder, event_loop).unwrap() }