diff options
author | 2023-05-30 01:33:50 +0200 | |
---|---|---|
committer | 2023-05-30 01:33:50 +0200 | |
commit | ef547469fdc8fe4faaa9902d9a8c920684f07189 (patch) | |
tree | ed4545b020a52219f97f6fced31a4bd67c47ec3f /wgpu/src/quad/gradient.rs | |
parent | 5fdc5affceca9345661ea2d213ccbce99721d09b (diff) | |
download | iced-ef547469fdc8fe4faaa9902d9a8c920684f07189.tar.gz iced-ef547469fdc8fe4faaa9902d9a8c920684f07189.tar.bz2 iced-ef547469fdc8fe4faaa9902d9a8c920684f07189.zip |
Improve boundaries between `quad` submodules in `iced_wgpu`
Diffstat (limited to 'wgpu/src/quad/gradient.rs')
-rw-r--r-- | wgpu/src/quad/gradient.rs | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/wgpu/src/quad/gradient.rs b/wgpu/src/quad/gradient.rs index 2729afdf..d3884ce1 100644 --- a/wgpu/src/quad/gradient.rs +++ b/wgpu/src/quad/gradient.rs @@ -24,13 +24,13 @@ unsafe impl Zeroable for Gradient {} #[derive(Debug)] pub struct Pipeline { - pub pipeline: wgpu::RenderPipeline, + pipeline: wgpu::RenderPipeline, } #[derive(Debug)] pub struct Layer { - pub instances: Buffer<Gradient>, - pub instance_count: usize, + instances: Buffer<Gradient>, + instance_count: usize, } impl Layer { @@ -48,23 +48,16 @@ impl Layer { } } - pub fn draw<'a>( - &'a self, - constants: &'a wgpu::BindGroup, - render_pass: &mut wgpu::RenderPass<'a>, - range: Range<usize>, + pub fn prepare( + &mut self, + device: &wgpu::Device, + queue: &wgpu::Queue, + instances: &[Gradient], ) { - #[cfg(feature = "tracing")] - let _ = tracing::info_span!("Wgpu::Quad::Gradient", "DRAW").entered(); - - render_pass.set_bind_group(0, constants, &[]); - render_pass.set_vertex_buffer(1, self.instances.slice(..)); + let _ = self.instances.resize(device, instances.len()); + let _ = self.instances.write(queue, 0, instances); - render_pass.draw_indexed( - 0..quad::INDICES.len() as u32, - 0, - range.start as u32..range.end as u32, - ); + self.instance_count = instances.len(); } } @@ -158,4 +151,25 @@ impl Pipeline { Self { pipeline } } + + pub fn render<'a>( + &'a self, + render_pass: &mut wgpu::RenderPass<'a>, + constants: &'a wgpu::BindGroup, + layer: &'a Layer, + range: Range<usize>, + ) { + #[cfg(feature = "tracing")] + let _ = tracing::info_span!("Wgpu::Quad::Gradient", "DRAW").entered(); + + render_pass.set_pipeline(&self.pipeline); + render_pass.set_bind_group(0, constants, &[]); + render_pass.set_vertex_buffer(1, layer.instances.slice(..)); + + render_pass.draw_indexed( + 0..quad::INDICES.len() as u32, + 0, + range.start as u32..range.end as u32, + ); + } } |