From a1a5fcfd46622d5b18d1716aa2adb4659835ccf3 Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Wed, 20 May 2020 20:28:35 +0200
Subject: Refactor `Viewport` and `Compositor`

---
 examples/integration/src/main.rs | 57 ++++++++++++++++++++++++----------------
 1 file changed, 35 insertions(+), 22 deletions(-)

(limited to 'examples/integration/src')

diff --git a/examples/integration/src/main.rs b/examples/integration/src/main.rs
index 0ade0458..8d16ed56 100644
--- a/examples/integration/src/main.rs
+++ b/examples/integration/src/main.rs
@@ -4,9 +4,7 @@ mod scene;
 use controls::Controls;
 use scene::Scene;
 
-use iced_wgpu::{
-    wgpu, window::SwapChain, Backend, Primitive, Renderer, Settings, Target,
-};
+use iced_wgpu::{wgpu, Backend, Primitive, Renderer, Settings, Viewport};
 use iced_winit::{
     futures, mouse, winit, Cache, Clipboard, Size, UserInterface,
 };
@@ -22,8 +20,12 @@ pub fn main() {
     // Initialize winit
     let event_loop = EventLoop::new();
     let window = winit::window::Window::new(&event_loop).unwrap();
-    let mut logical_size =
-        window.inner_size().to_logical(window.scale_factor());
+
+    let physical_size = window.inner_size();
+    let mut viewport = Viewport::with_physical_size(
+        Size::new(physical_size.width, physical_size.height),
+        window.scale_factor(),
+    );
     let mut modifiers = ModifiersState::default();
 
     // Initialize WGPU
@@ -55,7 +57,16 @@ pub fn main() {
     let mut swap_chain = {
         let size = window.inner_size();
 
-        SwapChain::new(&device, &surface, format, size.width, size.height)
+        device.create_swap_chain(
+            &surface,
+            &wgpu::SwapChainDescriptor {
+                usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT,
+                format: format,
+                width: size.width,
+                height: size.height,
+                present_mode: wgpu::PresentMode::Mailbox,
+            },
+        )
     };
     let mut resized = false;
 
@@ -83,8 +94,11 @@ pub fn main() {
                         modifiers = new_modifiers;
                     }
                     WindowEvent::Resized(new_size) => {
-                        logical_size =
-                            new_size.to_logical(window.scale_factor());
+                        viewport = Viewport::with_physical_size(
+                            Size::new(new_size.width, new_size.height),
+                            window.scale_factor(),
+                        );
+
                         resized = true;
                     }
                     WindowEvent::CloseRequested => {
@@ -117,7 +131,7 @@ pub fn main() {
                 // First, we build our user interface.
                 let mut user_interface = UserInterface::build(
                     controls.view(&scene),
-                    Size::new(logical_size.width, logical_size.height),
+                    viewport.logical_size(),
                     cache.take().unwrap(),
                     &mut renderer,
                 );
@@ -151,7 +165,7 @@ pub fn main() {
                     // user interface.
                     UserInterface::build(
                         controls.view(&scene),
-                        Size::new(logical_size.width, logical_size.height),
+                        viewport.logical_size(),
                         cache.take().unwrap(),
                         &mut renderer,
                     )
@@ -170,17 +184,19 @@ pub fn main() {
                 if resized {
                     let size = window.inner_size();
 
-                    swap_chain = SwapChain::new(
-                        &device,
+                    swap_chain = device.create_swap_chain(
                         &surface,
-                        format,
-                        size.width,
-                        size.height,
+                        &wgpu::SwapChainDescriptor {
+                            usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT,
+                            format: format,
+                            width: size.width,
+                            height: size.height,
+                            present_mode: wgpu::PresentMode::Mailbox,
+                        },
                     );
                 }
 
-                let (frame, viewport) =
-                    swap_chain.next_frame().expect("Next frame");
+                let frame = swap_chain.get_next_texture().expect("Next frame");
 
                 let mut encoder = device.create_command_encoder(
                     &wgpu::CommandEncoderDescriptor { label: None },
@@ -193,12 +209,9 @@ pub fn main() {
                 let mouse_interaction = renderer.backend_mut().draw(
                     &mut device,
                     &mut encoder,
-                    Target {
-                        texture: &frame.view,
-                        viewport,
-                    },
+                    &frame.view,
+                    &viewport,
                     &output,
-                    window.scale_factor(),
                     &["Some debug information!"],
                 );
 
-- 
cgit