1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-31 05:40:03 -04:00

Better error reporting

This commit is contained in:
Emil Ernerfeldt
2023-11-14 18:23:17 +01:00
parent 999a54ffc7
commit f9e6860c85
5 changed files with 56 additions and 28 deletions

View File

@@ -313,6 +313,11 @@ pub enum Error {
#[error("Found no glutin configs matching the template: {0:?}. Error: {1:?}")]
NoGlutinConfigs(glutin::config::ConfigTemplate, Box<dyn std::error::Error>),
/// An error from [`glutin`] when using [`glow`].
#[cfg(feature = "glow")]
#[error("egui_glow: {0}")]
OpenGL(#[from] egui_glow::PainterError),
/// An error from [`wgpu`].
#[cfg(feature = "wgpu")]
#[error("WGPU error: {0}")]

View File

@@ -1021,17 +1021,18 @@ mod glow_integration {
.get_mut(&viewport_id)
.expect("viewport doesn't exist");
let window = viewport.window.get_or_insert_with(|| {
let window = if let Some(window) = &mut viewport.window {
window
} else {
log::trace!("Window doesn't exist yet. Creating one now with finalize_window");
Rc::new(
glutin_winit::finalize_window(
viewport
.window
.insert(Rc::new(glutin_winit::finalize_window(
event_loop,
create_winit_window_builder(&viewport.builder),
&self.gl_config,
)
.expect("failed to finalize glutin window"),
)
});
)?))
};
{
// surface attributes
@@ -1330,8 +1331,7 @@ mod glow_integration {
}))
};
let painter = egui_glow::Painter::new(gl, "", native_options.shader_version)
.unwrap_or_else(|err| panic!("An OpenGL error occurred: {err}\n"));
let painter = egui_glow::Painter::new(gl, "", native_options.shader_version)?;
Ok((glutin_window_context, painter))
}
@@ -1821,22 +1821,27 @@ mod wgpu_integration {
let viewport_id = self.ids.this;
if let Ok(new_window) = create_winit_window_builder(&self.builder).build(event_loop) {
windows_id.insert(new_window.id(), viewport_id);
match create_winit_window_builder(&self.builder).build(event_loop) {
Ok(new_window) => {
windows_id.insert(new_window.id(), viewport_id);
if let Err(err) =
pollster::block_on(painter.set_window(viewport_id, Some(&new_window)))
{
log::error!("on set_window: viewport_id {viewport_id:?} {err}");
if let Err(err) =
pollster::block_on(painter.set_window(viewport_id, Some(&new_window)))
{
log::error!("on set_window: viewport_id {viewport_id:?} {err}");
}
self.egui_winit = Some(egui_winit::State::new(
event_loop,
Some(new_window.scale_factor() as f32),
painter.max_texture_side(),
));
self.window = Some(Rc::new(new_window));
}
Err(err) => {
log::error!("Failed to create window: {err}");
}
self.egui_winit = Some(egui_winit::State::new(
event_loop,
Some(new_window.scale_factor() as f32),
painter.max_texture_side(),
));
self.window = Some(Rc::new(new_window));
}
}
}