summaryrefslogtreecommitdiffstats
path: root/examples/integration_wgpu
diff options
context:
space:
mode:
Diffstat (limited to 'examples/integration_wgpu')
-rw-r--r--examples/integration_wgpu/README.md2
-rw-r--r--examples/integration_wgpu/src/controls.rs27
-rw-r--r--examples/integration_wgpu/src/main.rs35
-rw-r--r--examples/integration_wgpu/src/scene.rs77
-rw-r--r--examples/integration_wgpu/src/shader/frag.wgsl4
-rw-r--r--examples/integration_wgpu/src/shader/vert.wgsl4
6 files changed, 69 insertions, 80 deletions
diff --git a/examples/integration_wgpu/README.md b/examples/integration_wgpu/README.md
index faefa153..ece9ba1e 100644
--- a/examples/integration_wgpu/README.md
+++ b/examples/integration_wgpu/README.md
@@ -12,7 +12,7 @@ The __[`main`]__ file contains all the code of the example.
You can run it with `cargo run`:
```
-cargo run --package integration
+cargo run --package integration_wgpu
```
### How to run this example with WebGL backend
diff --git a/examples/integration_wgpu/src/controls.rs b/examples/integration_wgpu/src/controls.rs
index 9bca40eb..6c41738c 100644
--- a/examples/integration_wgpu/src/controls.rs
+++ b/examples/integration_wgpu/src/controls.rs
@@ -1,14 +1,10 @@
use iced_wgpu::Renderer;
-use iced_winit::widget::slider::{self, Slider};
-use iced_winit::widget::text_input::{self, TextInput};
-use iced_winit::widget::{Column, Row, Text};
+use iced_winit::widget::{slider, text_input, Column, Row, Text};
use iced_winit::{Alignment, Color, Command, Element, Length, Program};
pub struct Controls {
background_color: Color,
text: String,
- sliders: [slider::State; 3],
- text_input: text_input::State,
}
#[derive(Debug, Clone)]
@@ -22,8 +18,6 @@ impl Controls {
Controls {
background_color: Color::BLACK,
text: Default::default(),
- sliders: Default::default(),
- text_input: Default::default(),
}
}
@@ -49,9 +43,7 @@ impl Program for Controls {
Command::none()
}
- fn view(&mut self) -> Element<Message, Renderer> {
- let [r, g, b] = &mut self.sliders;
- let t = &mut self.text_input;
+ fn view(&self) -> Element<Message, Renderer> {
let background_color = self.background_color;
let text = &self.text;
@@ -59,7 +51,7 @@ impl Program for Controls {
.width(Length::Units(500))
.spacing(20)
.push(
- Slider::new(r, 0.0..=1.0, background_color.r, move |r| {
+ slider(0.0..=1.0, background_color.r, move |r| {
Message::BackgroundColorChanged(Color {
r,
..background_color
@@ -68,7 +60,7 @@ impl Program for Controls {
.step(0.01),
)
.push(
- Slider::new(g, 0.0..=1.0, background_color.g, move |g| {
+ slider(0.0..=1.0, background_color.g, move |g| {
Message::BackgroundColorChanged(Color {
g,
..background_color
@@ -77,7 +69,7 @@ impl Program for Controls {
.step(0.01),
)
.push(
- Slider::new(b, 0.0..=1.0, background_color.b, move |b| {
+ slider(0.0..=1.0, background_color.b, move |b| {
Message::BackgroundColorChanged(Color {
b,
..background_color
@@ -100,19 +92,18 @@ impl Program for Controls {
.spacing(10)
.push(
Text::new("Background color")
- .color(Color::WHITE),
+ .style(Color::WHITE),
)
.push(sliders)
.push(
Text::new(format!("{:?}", background_color))
.size(14)
- .color(Color::WHITE),
+ .style(Color::WHITE),
)
- .push(TextInput::new(
- t,
+ .push(text_input(
"Placeholder",
text,
- move |text| Message::TextChanged(text),
+ Message::TextChanged,
)),
),
)
diff --git a/examples/integration_wgpu/src/main.rs b/examples/integration_wgpu/src/main.rs
index 045ee0d3..86a0d6a4 100644
--- a/examples/integration_wgpu/src/main.rs
+++ b/examples/integration_wgpu/src/main.rs
@@ -5,9 +5,11 @@ use controls::Controls;
use scene::Scene;
use iced_wgpu::{wgpu, Backend, Renderer, Settings, Viewport};
-use iced_winit::{conversion, futures, program, winit, Clipboard, Debug, Size};
+use iced_winit::{
+ conversion, futures, program, renderer, winit, Clipboard, Color, Debug,
+ Size,
+};
-use futures::task::SpawnExt;
use winit::{
dpi::PhysicalPosition,
event::{Event, ModifiersState, WindowEvent},
@@ -71,7 +73,7 @@ pub fn main() {
let instance = wgpu::Instance::new(backend);
let surface = unsafe { instance.create_surface(&window) };
- let (format, (mut device, queue)) = futures::executor::block_on(async {
+ let (format, (device, queue)) = futures::executor::block_on(async {
let adapter = wgpu::util::initialize_adapter_from_env_or_default(
&instance,
backend,
@@ -91,7 +93,9 @@ pub fn main() {
(
surface
- .get_preferred_format(&adapter)
+ .get_supported_formats(&adapter)
+ .first()
+ .copied()
.expect("Get preferred format"),
adapter
.request_device(
@@ -114,24 +118,23 @@ pub fn main() {
format,
width: physical_size.width,
height: physical_size.height,
- present_mode: wgpu::PresentMode::Mailbox,
+ present_mode: wgpu::PresentMode::AutoVsync,
},
);
let mut resized = false;
- // Initialize staging belt and local pool
+ // Initialize staging belt
let mut staging_belt = wgpu::util::StagingBelt::new(5 * 1024);
- let mut local_pool = futures::executor::LocalPool::new();
// Initialize scene and GUI controls
- let scene = Scene::new(&mut device, format);
+ let scene = Scene::new(&device, format);
let controls = Controls::new();
// Initialize iced
let mut debug = Debug::new();
let mut renderer =
- Renderer::new(Backend::new(&mut device, Settings::default(), format));
+ Renderer::new(Backend::new(&device, Settings::default(), format));
let mut state = program::State::new(
controls,
@@ -188,6 +191,8 @@ pub fn main() {
viewport.scale_factor(),
),
&mut renderer,
+ &iced_wgpu::Theme::Dark,
+ &renderer::Style { text_color: Color::WHITE },
&mut clipboard,
&mut debug,
);
@@ -203,11 +208,11 @@ pub fn main() {
surface.configure(
&device,
&wgpu::SurfaceConfiguration {
+ format,
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
- format: format,
width: size.width,
height: size.height,
- present_mode: wgpu::PresentMode::Mailbox,
+ present_mode: wgpu::PresentMode::AutoVsync,
},
);
@@ -239,7 +244,7 @@ pub fn main() {
// And then iced on top
renderer.with_primitives(|backend, primitive| {
backend.present(
- &mut device,
+ &device,
&mut staging_belt,
&mut encoder,
&view,
@@ -262,12 +267,8 @@ pub fn main() {
);
// And recall staging buffers
- local_pool
- .spawner()
- .spawn(staging_belt.recall())
- .expect("Recall staging buffers");
+ staging_belt.recall();
- local_pool.run_until_stalled();
}
Err(error) => match error {
wgpu::SurfaceError::OutOfMemory => {
diff --git a/examples/integration_wgpu/src/scene.rs b/examples/integration_wgpu/src/scene.rs
index fbda1326..3e41fbda 100644
--- a/examples/integration_wgpu/src/scene.rs
+++ b/examples/integration_wgpu/src/scene.rs
@@ -23,7 +23,7 @@ impl Scene {
) -> wgpu::RenderPass<'a> {
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: None,
- color_attachments: &[wgpu::RenderPassColorAttachment {
+ color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: target,
resolve_target: None,
ops: wgpu::Operations {
@@ -39,7 +39,7 @@ impl Scene {
}),
store: true,
},
- }],
+ })],
depth_stencil_attachment: None,
})
}
@@ -55,8 +55,8 @@ fn build_pipeline(
texture_format: wgpu::TextureFormat,
) -> wgpu::RenderPipeline {
let (vs_module, fs_module) = (
- device.create_shader_module(&wgpu::include_wgsl!("shader/vert.wgsl")),
- device.create_shader_module(&wgpu::include_wgsl!("shader/frag.wgsl")),
+ device.create_shader_module(wgpu::include_wgsl!("shader/vert.wgsl")),
+ device.create_shader_module(wgpu::include_wgsl!("shader/frag.wgsl")),
);
let pipeline_layout =
@@ -66,40 +66,37 @@ fn build_pipeline(
bind_group_layouts: &[],
});
- let pipeline =
- device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
- label: None,
- layout: Some(&pipeline_layout),
- vertex: wgpu::VertexState {
- module: &vs_module,
- entry_point: "main",
- buffers: &[],
- },
- fragment: Some(wgpu::FragmentState {
- module: &fs_module,
- entry_point: "main",
- targets: &[wgpu::ColorTargetState {
- format: texture_format,
- blend: Some(wgpu::BlendState {
- color: wgpu::BlendComponent::REPLACE,
- alpha: wgpu::BlendComponent::REPLACE,
- }),
- write_mask: wgpu::ColorWrites::ALL,
- }],
- }),
- primitive: wgpu::PrimitiveState {
- topology: wgpu::PrimitiveTopology::TriangleList,
- front_face: wgpu::FrontFace::Ccw,
- ..Default::default()
- },
- depth_stencil: None,
- multisample: wgpu::MultisampleState {
- count: 1,
- mask: !0,
- alpha_to_coverage_enabled: false,
- },
- multiview: None,
- });
-
- pipeline
+ device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
+ label: None,
+ layout: Some(&pipeline_layout),
+ vertex: wgpu::VertexState {
+ module: &vs_module,
+ entry_point: "main",
+ buffers: &[],
+ },
+ fragment: Some(wgpu::FragmentState {
+ module: &fs_module,
+ entry_point: "main",
+ targets: &[Some(wgpu::ColorTargetState {
+ format: texture_format,
+ blend: Some(wgpu::BlendState {
+ color: wgpu::BlendComponent::REPLACE,
+ alpha: wgpu::BlendComponent::REPLACE,
+ }),
+ write_mask: wgpu::ColorWrites::ALL,
+ })],
+ }),
+ primitive: wgpu::PrimitiveState {
+ topology: wgpu::PrimitiveTopology::TriangleList,
+ front_face: wgpu::FrontFace::Ccw,
+ ..Default::default()
+ },
+ depth_stencil: None,
+ multisample: wgpu::MultisampleState {
+ count: 1,
+ mask: !0,
+ alpha_to_coverage_enabled: false,
+ },
+ multiview: None,
+ })
}
diff --git a/examples/integration_wgpu/src/shader/frag.wgsl b/examples/integration_wgpu/src/shader/frag.wgsl
index a6f61336..cf27bb56 100644
--- a/examples/integration_wgpu/src/shader/frag.wgsl
+++ b/examples/integration_wgpu/src/shader/frag.wgsl
@@ -1,4 +1,4 @@
-[[stage(fragment)]]
-fn main() -> [[location(0)]] vec4<f32> {
+@fragment
+fn main() -> @location(0) vec4<f32> {
return vec4<f32>(1.0, 0.0, 0.0, 1.0);
}
diff --git a/examples/integration_wgpu/src/shader/vert.wgsl b/examples/integration_wgpu/src/shader/vert.wgsl
index 7ef47fb2..e353e6ba 100644
--- a/examples/integration_wgpu/src/shader/vert.wgsl
+++ b/examples/integration_wgpu/src/shader/vert.wgsl
@@ -1,5 +1,5 @@
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] in_vertex_index: u32) -> [[builtin(position)]] vec4<f32> {
+@vertex
+fn main(@builtin(vertex_index) in_vertex_index: u32) -> @builtin(position) vec4<f32> {
let x = f32(1 - i32(in_vertex_index)) * 0.5;
let y = f32(1 - i32(in_vertex_index & 1u) * 2) * 0.5;
return vec4<f32>(x, y, 0.0, 1.0);