diff options
author | 2023-02-06 22:21:27 +0100 | |
---|---|---|
committer | 2023-02-24 13:37:30 +0100 | |
commit | 680ea5dcca37ecf71ab2e5194e907d9414715d22 (patch) | |
tree | 690d41d9bd5ef5b40285af75ef930d5088b896ba /wgpu/src/backend.rs | |
parent | c8befa8d95890eb22972f487e08974e962028eda (diff) | |
download | iced-680ea5dcca37ecf71ab2e5194e907d9414715d22.tar.gz iced-680ea5dcca37ecf71ab2e5194e907d9414715d22.tar.bz2 iced-680ea5dcca37ecf71ab2e5194e907d9414715d22.zip |
Refactor `quad::Pipeline` to `prepare` and `render` architecture
Diffstat (limited to '')
-rw-r--r-- | wgpu/src/backend.rs | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index f19959bd..2c35936c 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -88,13 +88,14 @@ impl Backend { let mut layers = Layer::generate(primitives, viewport); layers.push(Layer::overlay(overlay_text, viewport)); - for layer in layers { + for (i, layer) in layers.iter().enumerate() { self.flush( device, queue, scale_factor, transformation, &layer, + i, staging_belt, encoder, frame, @@ -102,6 +103,7 @@ impl Backend { ); } + self.quad_pipeline.end_frame(); self.text_pipeline.end_frame(); #[cfg(any(feature = "image", feature = "svg"))] @@ -115,6 +117,7 @@ impl Backend { scale_factor: f32, transformation: Transformation, layer: &Layer<'_>, + layer_index: usize, staging_belt: &mut wgpu::util::StagingBelt, encoder: &mut wgpu::CommandEncoder, target: &wgpu::TextureView, @@ -127,16 +130,32 @@ impl Backend { } if !layer.quads.is_empty() { - self.quad_pipeline.draw( + self.quad_pipeline.prepare( device, - staging_belt, - encoder, + queue, &layer.quads, transformation, scale_factor, - bounds, - target, ); + + let mut render_pass = + encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("iced_wgpu::quad render pass"), + color_attachments: &[Some( + wgpu::RenderPassColorAttachment { + view: target, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: true, + }, + }, + )], + depth_stencil_attachment: None, + }); + + self.quad_pipeline + .render(layer_index, bounds, &mut render_pass); } if !layer.meshes.is_empty() { |