diff options
author | 2024-05-08 19:43:07 +0200 | |
---|---|---|
committer | 2024-05-08 19:43:07 +0200 | |
commit | f1beb56a9af57c708ab51c44e713fdafa0a496ea (patch) | |
tree | 5bcd99647c79dba266b3c061f755d0047cfe6ed9 /wgpu/src/lib.rs | |
parent | e07b42ac96b8d098a883c93afe828a439f479c7b (diff) | |
parent | 99c1464cc16979381b3a531d293ee34fd6697480 (diff) | |
download | iced-f1beb56a9af57c708ab51c44e713fdafa0a496ea.tar.gz iced-f1beb56a9af57c708ab51c44e713fdafa0a496ea.tar.bz2 iced-f1beb56a9af57c708ab51c44e713fdafa0a496ea.zip |
Merge pull request #2430 from iced-rs/reuse-glyphon-pipeline-state
Reuse `glyphon::Pipeline` state in `iced_wgpu`
Diffstat (limited to 'wgpu/src/lib.rs')
-rw-r--r-- | wgpu/src/lib.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index 1fbdbe9a..ad88ce3e 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -79,6 +79,7 @@ pub struct Renderer { triangle_storage: triangle::Storage, text_storage: text::Storage, + text_viewport: text::Viewport, // TODO: Centralize all the image feature handling #[cfg(any(feature = "svg", feature = "image"))] @@ -87,8 +88,8 @@ pub struct Renderer { impl Renderer { pub fn new( - _device: &wgpu::Device, - _engine: &Engine, + device: &wgpu::Device, + engine: &Engine, default_font: Font, default_text_size: Pixels, ) -> Self { @@ -99,10 +100,11 @@ impl Renderer { triangle_storage: triangle::Storage::new(), text_storage: text::Storage::new(), + text_viewport: engine.text_pipeline.create_viewport(device), #[cfg(any(feature = "svg", feature = "image"))] image_cache: std::cell::RefCell::new( - _engine.create_image_cache(_device), + engine.create_image_cache(device), ), } } @@ -141,6 +143,8 @@ impl Renderer { ) { let scale_factor = viewport.scale_factor() as f32; + self.text_viewport.update(queue, viewport.physical_size()); + for layer in self.layers.iter_mut() { if !layer.quads.is_empty() { engine.quad_pipeline.prepare( @@ -182,12 +186,12 @@ impl Renderer { engine.text_pipeline.prepare( device, queue, + &self.text_viewport, encoder, &mut self.text_storage, &layer.text, layer.bounds, Transformation::scale(scale_factor), - viewport.physical_size(), ); } @@ -357,6 +361,7 @@ impl Renderer { if !layer.text.is_empty() { text_layer += engine.text_pipeline.render( + &self.text_viewport, &self.text_storage, text_layer, &layer.text, |