rendy_resource/sampler/
mod.rs

1//! Sampler creation-info and wrappers.
2
3mod cache;
4
5use {
6    crate::core::{device_owned, Device, DeviceId},
7    relevant::Relevant,
8    rendy_core::hal::{device::Device as _, image::SamplerDesc, Backend},
9};
10
11pub use crate::sampler::cache::SamplerCache;
12
13/// Generic sampler resource wrapper.
14#[derive(Debug)]
15pub struct Sampler<B: Backend> {
16    device: DeviceId,
17    raw: B::Sampler,
18    info: SamplerDesc,
19    relevant: Relevant,
20}
21
22device_owned!(Sampler<B>);
23
24impl<B> Sampler<B>
25where
26    B: Backend,
27{
28    /// Create new sampler.
29    pub fn create(
30        device: &Device<B>,
31        info: SamplerDesc,
32    ) -> Result<Self, rendy_core::hal::device::AllocationError> {
33        // TODO: Check info is valid.
34        let raw = unsafe { device.create_sampler(&info) }?;
35        Ok(Sampler {
36            device: device.id(),
37            raw,
38            info,
39            relevant: Relevant,
40        })
41    }
42
43    /// Destroy sampler resource.
44    pub unsafe fn dispose(self, device: &Device<B>) {
45        self.assert_device_owner(device);
46        device.destroy_sampler(self.raw);
47        self.relevant.dispose();
48    }
49
50    /// Get reference to raw sampler resource.
51    pub fn raw(&self) -> &B::Sampler {
52        &self.raw
53    }
54
55    /// Get mutable reference to raw sampler resource.
56    pub unsafe fn raw_mut(&mut self) -> &mut B::Sampler {
57        &mut self.raw
58    }
59}