summaryrefslogtreecommitdiffstats
path: root/wgpu/src/text.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-02-08 00:47:16 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-02-24 13:37:31 +0100
commit730d6a07564d014c470e02f233394ec98325d463 (patch)
tree531f0a7865058b1e9f17f8d6a67f75c301df00ce /wgpu/src/text.rs
parentb8c1809ea101cece6943432fd3597f785c39af09 (diff)
downloadiced-730d6a07564d014c470e02f233394ec98325d463.tar.gz
iced-730d6a07564d014c470e02f233394ec98325d463.tar.bz2
iced-730d6a07564d014c470e02f233394ec98325d463.zip
Reuse a `RenderPass` as much as possible in `iced_wgpu`
Diffstat (limited to 'wgpu/src/text.rs')
-rw-r--r--wgpu/src/text.rs40
1 files changed, 13 insertions, 27 deletions
diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs
index 95994a4e..73708fd8 100644
--- a/wgpu/src/text.rs
+++ b/wgpu/src/text.rs
@@ -16,7 +16,7 @@ pub struct Pipeline {
system: Option<System>,
renderers: Vec<glyphon::TextRenderer>,
atlas: glyphon::TextAtlas,
- layer: usize,
+ prepare_layer: usize,
}
#[ouroboros::self_referencing]
@@ -55,7 +55,7 @@ impl Pipeline {
),
renderers: Vec::new(),
atlas: glyphon::TextAtlas::new(device, queue, format),
- layer: 0,
+ prepare_layer: 0,
}
}
@@ -88,12 +88,12 @@ impl Pipeline {
target_size: Size<u32>,
) {
self.system.as_mut().unwrap().with_mut(|fields| {
- if self.renderers.len() <= self.layer {
+ if self.renderers.len() <= self.prepare_layer {
self.renderers
.push(glyphon::TextRenderer::new(device, queue));
}
- let renderer = &mut self.renderers[self.layer];
+ let renderer = &mut self.renderers[self.prepare_layer];
let keys: Vec<_> = sections
.iter()
@@ -179,35 +179,21 @@ impl Pipeline {
&mut glyphon::SwashCache::new(fields.fonts),
)
.expect("Prepare text sections");
+
+ self.prepare_layer += 1;
});
}
- pub fn render(
- &mut self,
- encoder: &mut wgpu::CommandEncoder,
- target: &wgpu::TextureView,
+ pub fn render<'a>(
+ &'a self,
+ layer: usize,
+ render_pass: &mut wgpu::RenderPass<'a>,
) {
- let mut render_pass =
- encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
- label: None,
- color_attachments: &[Some(wgpu::RenderPassColorAttachment {
- view: target,
- resolve_target: None,
- ops: wgpu::Operations {
- load: wgpu::LoadOp::Load,
- store: true,
- },
- })],
- depth_stencil_attachment: None,
- });
-
- let renderer = &mut self.renderers[self.layer];
+ let renderer = &self.renderers[layer];
renderer
- .render(&self.atlas, &mut render_pass)
+ .render(&self.atlas, render_pass)
.expect("Render text");
-
- self.layer += 1;
}
pub fn end_frame(&mut self) {
@@ -216,7 +202,7 @@ impl Pipeline {
.unwrap()
.with_render_cache_mut(|cache| cache.trim());
- self.layer = 0;
+ self.prepare_layer = 0;
}
pub fn measure(