diff --git a/crates/eframe/src/epi.rs b/crates/eframe/src/epi.rs index c37dc1cf6..b9a178a1d 100644 --- a/crates/eframe/src/epi.rs +++ b/crates/eframe/src/epi.rs @@ -72,7 +72,8 @@ pub struct CreationContext<'s> { /// The `get_proc_address` wrapper of underlying GL context #[cfg(feature = "glow")] - pub get_proc_address: Option<&'s dyn Fn(&std::ffi::CStr) -> *const std::ffi::c_void>, + pub get_proc_address: + Option *const std::ffi::c_void + Send + Sync>>, /// The underlying WGPU render state. /// diff --git a/crates/eframe/src/native/glow_integration.rs b/crates/eframe/src/native/glow_integration.rs index 1cd49449f..233ce5a49 100644 --- a/crates/eframe/src/native/glow_integration.rs +++ b/crates/eframe/src/native/glow_integration.rs @@ -294,14 +294,15 @@ impl<'app> GlowWinitApp<'app> { // Use latest raw_window_handle for eframe compatibility use raw_window_handle::{HasDisplayHandle as _, HasWindowHandle as _}; - let get_proc_address = |addr: &_| glutin.get_proc_address(addr); + let gl_config = glutin.gl_config.clone(); + let get_proc_address = move |addr: &_| gl_config.display().get_proc_address(addr); let window = glutin.window(ViewportId::ROOT); let cc = CreationContext { egui_ctx: integration.egui_ctx.clone(), integration_info: integration.frame.info().clone(), storage: integration.frame.storage(), gl: Some(gl), - get_proc_address: Some(&get_proc_address), + get_proc_address: Some(Arc::new(get_proc_address)), #[cfg(feature = "wgpu_no_default_features")] wgpu_render_state: None, raw_display_handle: window.display_handle().map(|h| h.as_raw()),