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>, ) -> 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}