iced_wgpu/
engine.rs

1use crate::graphics::Antialiasing;
2use crate::primitive;
3use crate::quad;
4use crate::text;
5use crate::triangle;
6
7use std::sync::{Arc, RwLock};
8
9#[derive(Clone)]
10#[allow(missing_debug_implementations)]
11pub struct Engine {
12    pub(crate) device: wgpu::Device,
13    pub(crate) queue: wgpu::Queue,
14    pub(crate) format: wgpu::TextureFormat,
15
16    pub(crate) quad_pipeline: quad::Pipeline,
17    pub(crate) text_pipeline: text::Pipeline,
18    pub(crate) triangle_pipeline: triangle::Pipeline,
19    #[cfg(any(feature = "image", feature = "svg"))]
20    pub(crate) image_pipeline: crate::image::Pipeline,
21    pub(crate) primitive_storage: Arc<RwLock<primitive::Storage>>,
22}
23
24impl Engine {
25    pub fn new(
26        _adapter: &wgpu::Adapter,
27        device: wgpu::Device,
28        queue: wgpu::Queue,
29        format: wgpu::TextureFormat,
30        antialiasing: Option<Antialiasing>, // TODO: Initialize AA pipelines lazily
31    ) -> Self {
32        Self {
33            format,
34
35            quad_pipeline: quad::Pipeline::new(&device, format),
36            text_pipeline: text::Pipeline::new(&device, &queue, format),
37            triangle_pipeline: triangle::Pipeline::new(
38                &device,
39                format,
40                antialiasing,
41            ),
42
43            #[cfg(any(feature = "image", feature = "svg"))]
44            image_pipeline: {
45                let backend = _adapter.get_info().backend;
46
47                crate::image::Pipeline::new(&device, format, backend)
48            },
49
50            primitive_storage: Arc::new(RwLock::new(
51                primitive::Storage::default(),
52            )),
53
54            device,
55            queue,
56        }
57    }
58
59    #[cfg(any(feature = "image", feature = "svg"))]
60    pub fn create_image_cache(
61        &self,
62        device: &wgpu::Device,
63    ) -> crate::image::Cache {
64        self.image_pipeline.create_cache(device)
65    }
66}