summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-02 20:20:35 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-02 20:20:35 +0100
commitef056d84890e745010675e70f734f882f89356c2 (patch)
tree000d021f26027f2c2fafcdb9d91c9f4b55f7893e /wgpu
parent58e04af824a64d9f712a2d6691d4283888d271d3 (diff)
downloadiced-ef056d84890e745010675e70f734f882f89356c2.tar.gz
iced-ef056d84890e745010675e70f734f882f89356c2.tar.bz2
iced-ef056d84890e745010675e70f734f882f89356c2.zip
Move `Target` to its own module
Diffstat (limited to 'wgpu')
-rw-r--r--wgpu/src/renderer.rs90
-rw-r--r--wgpu/src/renderer/target.rs74
-rw-r--r--wgpu/src/renderer/widget.rs10
-rw-r--r--wgpu/src/renderer/widget/button.rs (renamed from wgpu/src/renderer/button.rs)0
-rw-r--r--wgpu/src/renderer/widget/checkbox.rs (renamed from wgpu/src/renderer/checkbox.rs)0
-rw-r--r--wgpu/src/renderer/widget/column.rs (renamed from wgpu/src/renderer/column.rs)0
-rw-r--r--wgpu/src/renderer/widget/image.rs (renamed from wgpu/src/renderer/image.rs)0
-rw-r--r--wgpu/src/renderer/widget/radio.rs (renamed from wgpu/src/renderer/radio.rs)0
-rw-r--r--wgpu/src/renderer/widget/row.rs (renamed from wgpu/src/renderer/row.rs)0
-rw-r--r--wgpu/src/renderer/widget/scrollable.rs (renamed from wgpu/src/renderer/scrollable.rs)0
-rw-r--r--wgpu/src/renderer/widget/slider.rs (renamed from wgpu/src/renderer/slider.rs)0
-rw-r--r--wgpu/src/renderer/widget/text.rs (renamed from wgpu/src/renderer/text.rs)0
-rw-r--r--wgpu/src/renderer/widget/text_input.rs (renamed from wgpu/src/renderer/text_input.rs)0
13 files changed, 96 insertions, 78 deletions
diff --git a/wgpu/src/renderer.rs b/wgpu/src/renderer.rs
index 6e90c129..1988dfae 100644
--- a/wgpu/src/renderer.rs
+++ b/wgpu/src/renderer.rs
@@ -4,26 +4,19 @@ use iced_native::{
MouseCursor, Point, Rectangle, Widget,
};
-use raw_window_handle::HasRawWindowHandle;
use wgpu::{
Adapter, BackendBit, CommandEncoderDescriptor, Device, DeviceDescriptor,
- Extensions, Limits, PowerPreference, Queue, RequestAdapterOptions, Surface,
- SwapChain, SwapChainDescriptor, TextureFormat, TextureUsage,
+ Extensions, Limits, PowerPreference, Queue, RequestAdapterOptions,
+ TextureFormat,
};
use wgpu_glyph::{GlyphBrush, GlyphBrushBuilder, Section};
use std::{cell::RefCell, rc::Rc};
-mod button;
-mod checkbox;
-mod column;
-mod image;
-mod radio;
-mod row;
-mod scrollable;
-mod slider;
-mod text;
-mod text_input;
+mod target;
+mod widget;
+
+pub use target::Target;
pub struct Renderer {
device: Device,
@@ -34,62 +27,6 @@ pub struct Renderer {
glyph_brush: Rc<RefCell<GlyphBrush<'static, ()>>>,
}
-pub struct Target {
- surface: Surface,
- width: u16,
- height: u16,
- transformation: Transformation,
- swap_chain: SwapChain,
-}
-
-impl iced_native::renderer::Target for Target {
- type Renderer = Renderer;
-
- fn new<W: HasRawWindowHandle>(
- window: &W,
- width: u16,
- height: u16,
- renderer: &Renderer,
- ) -> Target {
- let surface = Surface::create(window);
-
- let swap_chain = renderer.device.create_swap_chain(
- &surface,
- &SwapChainDescriptor {
- usage: TextureUsage::OUTPUT_ATTACHMENT,
- format: TextureFormat::Bgra8UnormSrgb,
- width: u32::from(width),
- height: u32::from(height),
- present_mode: wgpu::PresentMode::Vsync,
- },
- );
-
- Target {
- surface,
- width,
- height,
- transformation: Transformation::orthographic(width, height),
- swap_chain,
- }
- }
-
- fn resize(&mut self, width: u16, height: u16, renderer: &Renderer) {
- self.width = width;
- self.height = height;
- self.transformation = Transformation::orthographic(width, height);
- self.swap_chain = renderer.device.create_swap_chain(
- &self.surface,
- &SwapChainDescriptor {
- usage: TextureUsage::OUTPUT_ATTACHMENT,
- format: TextureFormat::Bgra8UnormSrgb,
- width: u32::from(width),
- height: u32::from(height),
- present_mode: wgpu::PresentMode::Vsync,
- },
- );
- }
-}
-
pub struct Layer<'a> {
bounds: Rectangle<u32>,
y_offset: u32,
@@ -153,7 +90,9 @@ impl Renderer {
) -> MouseCursor {
log::debug!("Drawing");
- let frame = target.swap_chain.get_next_texture();
+ let (width, height) = target.dimensions();
+ let transformation = target.transformation();
+ let frame = target.next_frame();
let mut encoder = self
.device
@@ -181,8 +120,8 @@ impl Renderer {
Rectangle {
x: 0,
y: 0,
- width: u32::from(target.width),
- height: u32::from(target.height),
+ width: u32::from(width),
+ height: u32::from(height),
},
0,
));
@@ -190,12 +129,7 @@ impl Renderer {
self.draw_primitive(primitive, &mut layers);
for layer in layers {
- self.flush(
- target.transformation,
- &layer,
- &mut encoder,
- &frame.view,
- );
+ self.flush(transformation, &layer, &mut encoder, &frame.view);
}
self.queue.submit(&[encoder.finish()]);
diff --git a/wgpu/src/renderer/target.rs b/wgpu/src/renderer/target.rs
new file mode 100644
index 00000000..d9d05bf0
--- /dev/null
+++ b/wgpu/src/renderer/target.rs
@@ -0,0 +1,74 @@
+use crate::{Renderer, Transformation};
+
+use raw_window_handle::HasRawWindowHandle;
+
+pub struct Target {
+ surface: wgpu::Surface,
+ width: u16,
+ height: u16,
+ transformation: Transformation,
+ swap_chain: wgpu::SwapChain,
+}
+
+impl Target {
+ pub fn dimensions(&self) -> (u16, u16) {
+ (self.width, self.height)
+ }
+
+ pub fn transformation(&self) -> Transformation {
+ self.transformation
+ }
+
+ pub fn next_frame(&mut self) -> wgpu::SwapChainOutput {
+ self.swap_chain.get_next_texture()
+ }
+}
+
+impl iced_native::renderer::Target for Target {
+ type Renderer = Renderer;
+
+ fn new<W: HasRawWindowHandle>(
+ window: &W,
+ width: u16,
+ height: u16,
+ renderer: &Renderer,
+ ) -> Target {
+ let surface = wgpu::Surface::create(window);
+ let swap_chain =
+ new_swap_chain(&surface, width, height, &renderer.device);
+
+ Target {
+ surface,
+ width,
+ height,
+ transformation: Transformation::orthographic(width, height),
+ swap_chain,
+ }
+ }
+
+ fn resize(&mut self, width: u16, height: u16, renderer: &Renderer) {
+ self.width = width;
+ self.height = height;
+ self.transformation = Transformation::orthographic(width, height);
+ self.swap_chain =
+ new_swap_chain(&self.surface, width, height, &renderer.device);
+ }
+}
+
+fn new_swap_chain(
+ surface: &wgpu::Surface,
+ width: u16,
+ height: u16,
+ device: &wgpu::Device,
+) -> wgpu::SwapChain {
+ device.create_swap_chain(
+ &surface,
+ &wgpu::SwapChainDescriptor {
+ usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT,
+ format: wgpu::TextureFormat::Bgra8UnormSrgb,
+ width: u32::from(width),
+ height: u32::from(height),
+ present_mode: wgpu::PresentMode::Vsync,
+ },
+ )
+}
diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs
new file mode 100644
index 00000000..52410bee
--- /dev/null
+++ b/wgpu/src/renderer/widget.rs
@@ -0,0 +1,10 @@
+mod button;
+mod checkbox;
+mod column;
+mod image;
+mod radio;
+mod row;
+mod scrollable;
+mod slider;
+mod text;
+mod text_input;
diff --git a/wgpu/src/renderer/button.rs b/wgpu/src/renderer/widget/button.rs
index ad2186d6..ad2186d6 100644
--- a/wgpu/src/renderer/button.rs
+++ b/wgpu/src/renderer/widget/button.rs
diff --git a/wgpu/src/renderer/checkbox.rs b/wgpu/src/renderer/widget/checkbox.rs
index ea7a4c0b..ea7a4c0b 100644
--- a/wgpu/src/renderer/checkbox.rs
+++ b/wgpu/src/renderer/widget/checkbox.rs
diff --git a/wgpu/src/renderer/column.rs b/wgpu/src/renderer/widget/column.rs
index cac6da77..cac6da77 100644
--- a/wgpu/src/renderer/column.rs
+++ b/wgpu/src/renderer/widget/column.rs
diff --git a/wgpu/src/renderer/image.rs b/wgpu/src/renderer/widget/image.rs
index 0e312706..0e312706 100644
--- a/wgpu/src/renderer/image.rs
+++ b/wgpu/src/renderer/widget/image.rs
diff --git a/wgpu/src/renderer/radio.rs b/wgpu/src/renderer/widget/radio.rs
index 97b4f70e..97b4f70e 100644
--- a/wgpu/src/renderer/radio.rs
+++ b/wgpu/src/renderer/widget/radio.rs
diff --git a/wgpu/src/renderer/row.rs b/wgpu/src/renderer/widget/row.rs
index bbfef9a1..bbfef9a1 100644
--- a/wgpu/src/renderer/row.rs
+++ b/wgpu/src/renderer/widget/row.rs
diff --git a/wgpu/src/renderer/scrollable.rs b/wgpu/src/renderer/widget/scrollable.rs
index 72d77cc8..72d77cc8 100644
--- a/wgpu/src/renderer/scrollable.rs
+++ b/wgpu/src/renderer/widget/scrollable.rs
diff --git a/wgpu/src/renderer/slider.rs b/wgpu/src/renderer/widget/slider.rs
index 4ae3abc4..4ae3abc4 100644
--- a/wgpu/src/renderer/slider.rs
+++ b/wgpu/src/renderer/widget/slider.rs
diff --git a/wgpu/src/renderer/text.rs b/wgpu/src/renderer/widget/text.rs
index 82f75f09..82f75f09 100644
--- a/wgpu/src/renderer/text.rs
+++ b/wgpu/src/renderer/widget/text.rs
diff --git a/wgpu/src/renderer/text_input.rs b/wgpu/src/renderer/widget/text_input.rs
index deb8eae7..deb8eae7 100644
--- a/wgpu/src/renderer/text_input.rs
+++ b/wgpu/src/renderer/widget/text_input.rs