ursus_core/render/gfx/sampler/
store.rs1use crate::render::gfx::sampler::desc;
2use crate::render::gfx::sampler::desc::SamplerDesc;
3use crate::render::gfx::types::SamplerId;
4use ash::vk;
5
6struct StoredSampler {
7 handle: vk::Sampler,
8}
9
10pub struct SamplerStore {
11 samplers: Vec<StoredSampler>,
12 device: ash::Device,
13}
14
15impl SamplerStore {
16 pub fn new(device: ash::Device) -> Self {
17 Self { samplers: Vec::new(), device }
18 }
19
20 pub fn create(&mut self, desc: SamplerDesc) -> anyhow::Result<SamplerId> {
21 let handle = desc::create_from_desc(&self.device, desc)?;
22 let id = SamplerId(self.samplers.len() as u32);
23 self.samplers.push(StoredSampler { handle });
24 Ok(id)
25 }
26
27 pub(crate) fn handle(&self, id: SamplerId) -> vk::Sampler {
28 self.samplers[id.0 as usize].handle
29 }
30}
31
32impl Drop for SamplerStore {
33 fn drop(&mut self) {
34 unsafe {
35 for s in &self.samplers {
36 self.device.destroy_sampler(s.handle, None);
37 }
38 }
39 }
40}