diff options
Diffstat (limited to '')
-rw-r--r-- | examples/integration/src/main.rs (renamed from examples/integration_wgpu/src/main.rs) | 122 |
1 files changed, 62 insertions, 60 deletions
diff --git a/examples/integration_wgpu/src/main.rs b/examples/integration/src/main.rs index 15901db8..c935aca7 100644 --- a/examples/integration_wgpu/src/main.rs +++ b/examples/integration/src/main.rs @@ -4,11 +4,14 @@ mod scene; use controls::Controls; use scene::Scene; -use iced_wgpu::{wgpu, Backend, Renderer, Settings, Viewport}; -use iced_winit::{ - conversion, futures, program, renderer, winit, Clipboard, Color, Debug, - Size, -}; +use iced_wgpu::graphics::Viewport; +use iced_wgpu::{wgpu, Backend, Renderer, Settings}; +use iced_winit::core::renderer; +use iced_winit::core::{Color, Size}; +use iced_winit::runtime::program; +use iced_winit::runtime::Debug; +use iced_winit::style::Theme; +use iced_winit::{conversion, futures, winit, Clipboard}; use winit::{ dpi::PhysicalPosition, @@ -34,7 +37,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { .and_then(|win| win.document()) .and_then(|doc| doc.get_element_by_id("iced_canvas")) .and_then(|element| element.dyn_into::<HtmlCanvasElement>().ok()) - .expect("Canvas with id `iced_canvas` is missing") + .expect("Get canvas element") }; #[cfg(not(target_arch = "wasm32"))] env_logger::init(); @@ -74,47 +77,49 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { }); let surface = unsafe { instance.create_surface(&window) }?; - let (format, (device, queue)) = futures::executor::block_on(async { - let adapter = wgpu::util::initialize_adapter_from_env_or_default( - &instance, - backend, - Some(&surface), - ) - .await - .expect("No suitable GPU adapters found on the system!"); - - let adapter_features = adapter.features(); - - #[cfg(target_arch = "wasm32")] - let needed_limits = wgpu::Limits::downlevel_webgl2_defaults() - .using_resolution(adapter.limits()); - - #[cfg(not(target_arch = "wasm32"))] - let needed_limits = wgpu::Limits::default(); - - let capabilities = surface.get_capabilities(&adapter); - - ( - capabilities - .formats - .iter() - .copied() - .find(wgpu::TextureFormat::is_srgb) - .or_else(|| capabilities.formats.first().copied()) - .expect("Get preferred format"), - adapter - .request_device( - &wgpu::DeviceDescriptor { - label: None, - features: adapter_features & wgpu::Features::default(), - limits: needed_limits, - }, - None, - ) - .await - .expect("Request device"), - ) - }); + let (format, (device, queue)) = + futures::futures::executor::block_on(async { + let adapter = wgpu::util::initialize_adapter_from_env_or_default( + &instance, + backend, + Some(&surface), + ) + .await + .expect("Create adapter"); + + let adapter_features = adapter.features(); + + #[cfg(target_arch = "wasm32")] + let needed_limits = wgpu::Limits::downlevel_webgl2_defaults() + .using_resolution(adapter.limits()); + + #[cfg(not(target_arch = "wasm32"))] + let needed_limits = wgpu::Limits::default(); + + let capabilities = surface.get_capabilities(&adapter); + + ( + capabilities + .formats + .iter() + .copied() + .find(wgpu::TextureFormat::is_srgb) + .or_else(|| capabilities.formats.first().copied()) + .expect("Get preferred format"), + adapter + .request_device( + &wgpu::DeviceDescriptor { + label: None, + features: adapter_features + & wgpu::Features::default(), + limits: needed_limits, + }, + None, + ) + .await + .expect("Request device"), + ) + }); surface.configure( &device, @@ -131,17 +136,18 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { let mut resized = false; - // Initialize staging belt - let mut staging_belt = wgpu::util::StagingBelt::new(5 * 1024); - // Initialize scene and GUI controls let scene = Scene::new(&device, format); let controls = Controls::new(); // Initialize iced let mut debug = Debug::new(); - let mut renderer = - Renderer::new(Backend::new(&device, Settings::default(), format)); + let mut renderer = Renderer::new(Backend::new( + &device, + &queue, + Settings::default(), + format, + )); let mut state = program::State::new( controls, @@ -193,7 +199,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { viewport.scale_factor(), ), &mut renderer, - &iced_wgpu::Theme::Dark, + &Theme::Dark, &renderer::Style { text_color: Color::WHITE }, &mut clipboard, &mut debug, @@ -221,7 +227,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { height: size.height, present_mode: wgpu::PresentMode::AutoVsync, alpha_mode: wgpu::CompositeAlphaMode::Auto, - view_formats: vec![] + view_formats: vec![], }, ); @@ -254,8 +260,9 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { renderer.with_primitives(|backend, primitive| { backend.present( &device, - &mut staging_belt, + &queue, &mut encoder, + None, &view, primitive, &viewport, @@ -264,7 +271,6 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { }); // Then we submit the work - staging_belt.finish(); queue.submit(Some(encoder.finish())); frame.present(); @@ -274,10 +280,6 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> { state.mouse_interaction(), ), ); - - // And recall staging buffers - staging_belt.recall(); - } Err(error) => match error { wgpu::SurfaceError::OutOfMemory => { |