mirror of
https://github.com/emilk/egui.git
synced 2026-08-29 21:00:03 -04:00
Update wgpu to 0.19 (#3824)
* Closes https://github.com/emilk/egui/issues/3675 --------- Co-authored-by: Andreas Reich <r_andreas2@web.de> Co-authored-by: Mingun <Alexander_Sergey@mail.ru>
This commit is contained in:
@@ -4,7 +4,7 @@ use std::time::Instant;
|
||||
|
||||
use winit::event_loop::EventLoopWindowTarget;
|
||||
|
||||
use raw_window_handle::{HasRawDisplayHandle as _, HasRawWindowHandle as _};
|
||||
use raw_window_handle::{HasDisplayHandle as _, HasWindowHandle as _};
|
||||
|
||||
use egui::{DeferredViewportUiCallback, NumExt as _, ViewportBuilder, ViewportId};
|
||||
use egui_winit::{EventResponse, WindowSettings};
|
||||
@@ -165,8 +165,8 @@ impl EpiIntegration {
|
||||
gl,
|
||||
#[cfg(feature = "wgpu")]
|
||||
wgpu_render_state,
|
||||
raw_display_handle: window.raw_display_handle(),
|
||||
raw_window_handle: window.raw_window_handle(),
|
||||
raw_display_handle: window.display_handle().map(|h| h.as_raw()),
|
||||
raw_window_handle: window.window_handle().map(|h| h.as_raw()),
|
||||
};
|
||||
|
||||
let icon = native_options
|
||||
|
||||
@@ -16,7 +16,6 @@ use glutin::{
|
||||
prelude::{GlDisplay, PossiblyCurrentGlContext},
|
||||
surface::GlSurface,
|
||||
};
|
||||
use raw_window_handle::{HasRawDisplayHandle as _, HasRawWindowHandle as _};
|
||||
use winit::{
|
||||
event_loop::{EventLoop, EventLoopProxy, EventLoopWindowTarget},
|
||||
window::{Window, WindowId},
|
||||
@@ -126,7 +125,7 @@ struct Viewport {
|
||||
// These three live and die together.
|
||||
// TODO(emilk): clump them together into one struct!
|
||||
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
||||
window: Option<Rc<Window>>,
|
||||
window: Option<Arc<Window>>,
|
||||
egui_winit: Option<egui_winit::State>,
|
||||
}
|
||||
|
||||
@@ -294,6 +293,9 @@ impl GlowWinitApp {
|
||||
.expect("Single-use AppCreator has unexpectedly already been taken");
|
||||
|
||||
let app = {
|
||||
// Use latest raw_window_handle for eframe compatibility
|
||||
use raw_window_handle::{HasDisplayHandle as _, HasWindowHandle as _};
|
||||
|
||||
let window = glutin.window(ViewportId::ROOT);
|
||||
let cc = CreationContext {
|
||||
egui_ctx: integration.egui_ctx.clone(),
|
||||
@@ -302,8 +304,8 @@ impl GlowWinitApp {
|
||||
gl: Some(gl),
|
||||
#[cfg(feature = "wgpu")]
|
||||
wgpu_render_state: None,
|
||||
raw_display_handle: window.raw_display_handle(),
|
||||
raw_window_handle: window.raw_window_handle(),
|
||||
raw_display_handle: window.display_handle().map(|h| h.as_raw()),
|
||||
raw_window_handle: window.window_handle().map(|h| h.as_raw()),
|
||||
};
|
||||
crate::profile_scope!("app_creator");
|
||||
app_creator(&cc)
|
||||
@@ -373,7 +375,7 @@ impl WinitApp for GlowWinitApp {
|
||||
self.running.as_ref().map(|r| &r.integration)
|
||||
}
|
||||
|
||||
fn window(&self, window_id: WindowId) -> Option<Rc<Window>> {
|
||||
fn window(&self, window_id: WindowId) -> Option<Arc<Window>> {
|
||||
let running = self.running.as_ref()?;
|
||||
let glutin = running.glutin.borrow();
|
||||
let viewport_id = *glutin.viewport_from_window.get(&window_id)?;
|
||||
@@ -898,15 +900,18 @@ impl GlutinWindowContext {
|
||||
gl_display.version_string(),
|
||||
gl_display.supported_features()
|
||||
);
|
||||
let raw_window_handle = window.as_ref().map(|w| w.raw_window_handle());
|
||||
log::debug!("creating gl context using raw window handle: {raw_window_handle:?}");
|
||||
let glutin_raw_window_handle = window.as_ref().map(|w| {
|
||||
use rwh_05::HasRawWindowHandle as _; // glutin stuck on old version of raw-window-handle
|
||||
w.raw_window_handle()
|
||||
});
|
||||
log::debug!("creating gl context using raw window handle: {glutin_raw_window_handle:?}");
|
||||
|
||||
// create gl context. if core context cannot be created, try gl es context as fallback.
|
||||
let context_attributes =
|
||||
glutin::context::ContextAttributesBuilder::new().build(raw_window_handle);
|
||||
glutin::context::ContextAttributesBuilder::new().build(glutin_raw_window_handle);
|
||||
let fallback_context_attributes = glutin::context::ContextAttributesBuilder::new()
|
||||
.with_context_api(glutin::context::ContextApi::Gles(None))
|
||||
.build(raw_window_handle);
|
||||
.build(glutin_raw_window_handle);
|
||||
|
||||
let gl_context_result = unsafe {
|
||||
crate::profile_scope!("create_context");
|
||||
@@ -952,7 +957,7 @@ impl GlutinWindowContext {
|
||||
screenshot_requested: false,
|
||||
viewport_ui_cb: None,
|
||||
gl_surface: None,
|
||||
window: window.map(Rc::new),
|
||||
window: window.map(Arc::new),
|
||||
egui_winit: None,
|
||||
},
|
||||
);
|
||||
@@ -1031,7 +1036,7 @@ impl GlutinWindowContext {
|
||||
);
|
||||
viewport.info.minimized = window.is_minimized();
|
||||
viewport.info.maximized = Some(window.is_maximized());
|
||||
viewport.window.insert(Rc::new(window))
|
||||
viewport.window.insert(Arc::new(window))
|
||||
};
|
||||
|
||||
viewport.egui_winit.get_or_insert_with(|| {
|
||||
@@ -1052,9 +1057,11 @@ impl GlutinWindowContext {
|
||||
let (width_px, height_px): (u32, u32) = window.inner_size().into();
|
||||
let width_px = std::num::NonZeroU32::new(width_px.at_least(1)).unwrap();
|
||||
let height_px = std::num::NonZeroU32::new(height_px.at_least(1)).unwrap();
|
||||
let surface_attributes =
|
||||
let surface_attributes = {
|
||||
use rwh_05::HasRawWindowHandle as _; // glutin stuck on old version of raw-window-handle
|
||||
glutin::surface::SurfaceAttributesBuilder::<glutin::surface::WindowSurface>::new()
|
||||
.build(window.raw_window_handle(), width_px, height_px);
|
||||
.build(window.raw_window_handle(), width_px, height_px)
|
||||
};
|
||||
|
||||
log::trace!("creating surface with attributes: {surface_attributes:?}");
|
||||
let gl_surface = unsafe {
|
||||
@@ -1120,7 +1127,7 @@ impl GlutinWindowContext {
|
||||
.expect("viewport doesn't exist")
|
||||
}
|
||||
|
||||
fn window(&self, viewport_id: ViewportId) -> Rc<Window> {
|
||||
fn window(&self, viewport_id: ViewportId) -> Arc<Window> {
|
||||
self.viewport(viewport_id)
|
||||
.window
|
||||
.clone()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
use std::{cell::RefCell, rc::Rc, sync::Arc, time::Instant};
|
||||
|
||||
use parking_lot::Mutex;
|
||||
use raw_window_handle::{HasRawDisplayHandle as _, HasRawWindowHandle as _};
|
||||
use raw_window_handle::{HasDisplayHandle as _, HasWindowHandle as _};
|
||||
use winit::{
|
||||
event_loop::{EventLoop, EventLoopProxy, EventLoopWindowTarget},
|
||||
window::{Window, WindowId},
|
||||
@@ -84,7 +84,7 @@ pub struct Viewport {
|
||||
|
||||
/// Window surface state that's initialized when the app starts running via a Resumed event
|
||||
/// and on Android will also be destroyed if the application is paused.
|
||||
window: Option<Rc<Window>>,
|
||||
window: Option<Arc<Window>>,
|
||||
|
||||
/// `window` and `egui_winit` are initialized together.
|
||||
egui_winit: Option<egui_winit::State>,
|
||||
@@ -170,9 +170,11 @@ impl WgpuWinitApp {
|
||||
self.native_options.viewport.transparent.unwrap_or(false),
|
||||
);
|
||||
|
||||
let window = Arc::new(window);
|
||||
|
||||
{
|
||||
crate::profile_scope!("set_window");
|
||||
pollster::block_on(painter.set_window(ViewportId::ROOT, Some(&window)))?;
|
||||
pollster::block_on(painter.set_window(ViewportId::ROOT, Some(window.clone())))?;
|
||||
}
|
||||
|
||||
let wgpu_render_state = painter.render_state();
|
||||
@@ -235,8 +237,8 @@ impl WgpuWinitApp {
|
||||
#[cfg(feature = "glow")]
|
||||
gl: None,
|
||||
wgpu_render_state,
|
||||
raw_display_handle: window.raw_display_handle(),
|
||||
raw_window_handle: window.raw_window_handle(),
|
||||
raw_display_handle: window.display_handle().map(|h| h.as_raw()),
|
||||
raw_window_handle: window.window_handle().map(|h| h.as_raw()),
|
||||
};
|
||||
let app = {
|
||||
crate::profile_scope!("user_app_creator");
|
||||
@@ -260,7 +262,7 @@ impl WgpuWinitApp {
|
||||
},
|
||||
screenshot_requested: false,
|
||||
viewport_ui_cb: None,
|
||||
window: Some(Rc::new(window)),
|
||||
window: Some(window),
|
||||
egui_winit: Some(egui_winit),
|
||||
},
|
||||
);
|
||||
@@ -323,7 +325,7 @@ impl WinitApp for WgpuWinitApp {
|
||||
self.running.as_ref().map(|r| &r.integration)
|
||||
}
|
||||
|
||||
fn window(&self, window_id: WindowId) -> Option<Rc<Window>> {
|
||||
fn window(&self, window_id: WindowId) -> Option<Arc<Window>> {
|
||||
self.running
|
||||
.as_ref()
|
||||
.and_then(|r| {
|
||||
@@ -544,7 +546,8 @@ impl WgpuWinitRunning {
|
||||
|
||||
{
|
||||
crate::profile_scope!("set_window");
|
||||
if let Err(err) = pollster::block_on(painter.set_window(viewport_id, Some(window)))
|
||||
if let Err(err) =
|
||||
pollster::block_on(painter.set_window(viewport_id, Some(window.clone())))
|
||||
{
|
||||
log::warn!("Failed to set window: {err}");
|
||||
}
|
||||
@@ -797,7 +800,10 @@ impl Viewport {
|
||||
Ok(window) => {
|
||||
windows_id.insert(window.id(), viewport_id);
|
||||
|
||||
if let Err(err) = pollster::block_on(painter.set_window(viewport_id, Some(&window)))
|
||||
let window = Arc::new(window);
|
||||
|
||||
if let Err(err) =
|
||||
pollster::block_on(painter.set_window(viewport_id, Some(window.clone())))
|
||||
{
|
||||
log::error!("on set_window: viewport_id {viewport_id:?} {err}");
|
||||
}
|
||||
@@ -813,7 +819,7 @@ impl Viewport {
|
||||
self.info.minimized = window.is_minimized();
|
||||
self.info.maximized = Some(window.is_maximized());
|
||||
|
||||
self.window = Some(Rc::new(window));
|
||||
self.window = Some(window);
|
||||
}
|
||||
Err(err) => {
|
||||
log::error!("Failed to create window: {err}");
|
||||
@@ -930,7 +936,7 @@ fn render_immediate_viewport(
|
||||
|
||||
{
|
||||
crate::profile_scope!("set_window");
|
||||
if let Err(err) = pollster::block_on(painter.set_window(ids.this, Some(window))) {
|
||||
if let Err(err) = pollster::block_on(painter.set_window(ids.this, Some(window.clone()))) {
|
||||
log::error!(
|
||||
"when rendering viewport_id={:?}, set_window Error {err}",
|
||||
ids.this
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use std::{rc::Rc, time::Instant};
|
||||
use std::{sync::Arc, time::Instant};
|
||||
|
||||
use winit::{
|
||||
event_loop::EventLoopWindowTarget,
|
||||
@@ -68,7 +68,7 @@ pub trait WinitApp {
|
||||
|
||||
fn integration(&self) -> Option<&EpiIntegration>;
|
||||
|
||||
fn window(&self, window_id: WindowId) -> Option<Rc<Window>>;
|
||||
fn window(&self, window_id: WindowId) -> Option<Arc<Window>>;
|
||||
|
||||
fn window_id_from_viewport_id(&self, id: ViewportId) -> Option<WindowId>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user