mirror of
https://github.com/emilk/egui.git
synced 2026-08-30 13:20:05 -04:00
Make egui_wgpu::winit::Painter::set_window async (#2434)
* Make `egui_wgpu::winit::Painter::set_window` async * Fix changelog link
This commit is contained in:
@@ -4,6 +4,7 @@ All notable changes to the `egui-wgpu` integration will be noted in this file.
|
||||
|
||||
## Unreleased
|
||||
* Return `Err` instead of panic if we can't find a device ([#2428](https://github.com/emilk/egui/pull/2428)).
|
||||
* `winit::Painter::set_window` is now `async` ([#2434](https://github.com/emilk/egui/pull/2434)).
|
||||
|
||||
|
||||
## 0.20.0 - 2022-12-08 - web support
|
||||
|
||||
@@ -32,7 +32,7 @@ all-features = true
|
||||
puffin = ["dep:puffin"]
|
||||
|
||||
## Enable [`winit`](https://docs.rs/winit) integration.
|
||||
winit = ["dep:pollster", "dep:winit"]
|
||||
winit = ["dep:winit"]
|
||||
|
||||
|
||||
[dependencies]
|
||||
@@ -49,7 +49,6 @@ wgpu = "0.14"
|
||||
## Enable this when generating docs.
|
||||
document-features = { version = "0.2", optional = true }
|
||||
|
||||
pollster = { version = "0.2", optional = true }
|
||||
winit = { version = "0.27.2", optional = true }
|
||||
|
||||
# Native:
|
||||
|
||||
@@ -88,17 +88,19 @@ impl Painter {
|
||||
//
|
||||
// After we've initialized our render state once though we expect all future surfaces
|
||||
// will have the same format and so this render state will remain valid.
|
||||
fn ensure_render_state_for_surface(
|
||||
async fn ensure_render_state_for_surface(
|
||||
&mut self,
|
||||
surface: &Surface,
|
||||
) -> Result<(), wgpu::RequestDeviceError> {
|
||||
if self.adapter.is_none() {
|
||||
self.adapter =
|
||||
pollster::block_on(self.instance.request_adapter(&wgpu::RequestAdapterOptions {
|
||||
self.adapter = self
|
||||
.instance
|
||||
.request_adapter(&wgpu::RequestAdapterOptions {
|
||||
power_preference: self.configuration.power_preference,
|
||||
compatible_surface: Some(surface),
|
||||
force_fallback_adapter: false,
|
||||
}));
|
||||
})
|
||||
.await;
|
||||
}
|
||||
if self.render_state.is_none() {
|
||||
match &self.adapter {
|
||||
@@ -106,7 +108,7 @@ impl Painter {
|
||||
let swapchain_format = crate::preferred_framebuffer_format(
|
||||
&surface.get_supported_formats(adapter),
|
||||
);
|
||||
let rs = pollster::block_on(self.init_render_state(adapter, swapchain_format))?;
|
||||
let rs = self.init_render_state(adapter, swapchain_format).await?;
|
||||
self.render_state = Some(rs);
|
||||
}
|
||||
None => return Err(wgpu::RequestDeviceError {}),
|
||||
@@ -171,7 +173,7 @@ impl Painter {
|
||||
///
|
||||
/// # Errors
|
||||
/// If the provided wgpu configuration does not match an available device.
|
||||
pub unsafe fn set_window(
|
||||
pub async unsafe fn set_window(
|
||||
&mut self,
|
||||
window: Option<&winit::window::Window>,
|
||||
) -> Result<(), wgpu::RequestDeviceError> {
|
||||
@@ -179,7 +181,7 @@ impl Painter {
|
||||
Some(window) => {
|
||||
let surface = self.instance.create_surface(&window);
|
||||
|
||||
self.ensure_render_state_for_surface(&surface)?;
|
||||
self.ensure_render_state_for_surface(&surface).await?;
|
||||
|
||||
let size = window.inner_size();
|
||||
let width = size.width;
|
||||
|
||||
Reference in New Issue
Block a user