gpu/data/textures/
sampler.rs

1//FIXME: Create Wrap struct and Filter struct.
2
3use crate::prelude::*;
4use crate::{Context, GLContext};
5
6type SamplerResource = <glow::Context as HasContext>::Sampler;
7
8/// A `Sampler` is responsible for sampling values from a texture. It supports filtering and coordinates wrapping.
9pub struct Sampler {
10    gl       : GLContext,
11    resource : SamplerResource
12}
13
14impl Sampler {
15    /// Creates a new `Sampler` with default wrapping as `REPEAT` and filtering as `NEAREST`.
16    pub fn new(context:&Context) -> Self {
17        let gl = context.gl_context();
18        let resource = unsafe {
19            let resource = gl.create_sampler().expect("Couldn't create sampler");
20            gl.sampler_parameter_i32(resource, glow::TEXTURE_WRAP_S, glow::REPEAT as i32);
21            gl.sampler_parameter_i32(resource, glow::TEXTURE_WRAP_T, glow::REPEAT as i32);
22            gl.sampler_parameter_i32(resource, glow::TEXTURE_MIN_FILTER, glow::NEAREST as i32);
23            gl.sampler_parameter_i32(resource, glow::TEXTURE_MAG_FILTER, glow::NEAREST as i32);
24            resource
25        };
26        Self { gl, resource }
27    }
28
29    /// Gets `SamplerResource`.
30    pub fn resource(&self) -> SamplerResource {
31        self.resource
32    }
33}
34
35impl Drop for Sampler {
36    fn drop(&mut self) {
37        unsafe {
38            self.gl.delete_sampler(self.resource());
39        }
40    }
41}