tessera_ui/renderer/compute/
resource.rs

1use std::collections::HashMap;
2
3pub type ComputeResource = wgpu::Buffer;
4pub type ComputeResourceRef = usize;
5
6#[derive(Debug)]
7pub struct ComputeResourceManager {
8    idx: usize,
9    resources: HashMap<usize, ComputeResource>,
10}
11
12impl Default for ComputeResourceManager {
13    fn default() -> Self {
14        Self::new()
15    }
16}
17
18impl ComputeResourceManager {
19    pub fn new() -> Self {
20        Self {
21            idx: 0,
22            resources: HashMap::new(),
23        }
24    }
25
26    /// Clear all resources.
27    pub fn clear(&mut self) {
28        self.idx = 0;
29        self.resources.clear();
30    }
31
32    /// Move a buffer into the resource manager.
33    pub fn push(&mut self, buffer: wgpu::Buffer) -> ComputeResourceRef {
34        self.resources.insert(self.idx, buffer);
35        let id = self.idx;
36        self.idx += 1;
37        id
38    }
39
40    /// Access a resource in ref by its ID.
41    pub fn get(&self, id: &ComputeResourceRef) -> Option<&ComputeResource> {
42        self.resources.get(id)
43    }
44
45    /// Check if a resource exists by its ID.
46    pub fn contains(&self, id: &ComputeResourceRef) -> bool {
47        self.resources.contains_key(id)
48    }
49
50    /// Move a resource out of the manager.
51    pub fn take(&mut self, id: &ComputeResourceRef) -> Option<ComputeResource> {
52        self.resources.remove(id)
53    }
54}