webgl_rs/
sampler.rs

1//! WebGLSampler and methods
2use glenum::{
3    CompareMode, DepthTest, TextureMagFilter, TextureMinFilter, TextureParameter, TextureWrap,
4};
5use rendering_context::WebGL2RenderingContext;
6use wasm_bindgen::prelude::*;
7
8impl WebGL2RenderingContext {
9    /// Creates and initializes a `WebGLRSSampler` object.
10    pub fn create_sampler(&self) -> WebGLRSSampler {
11        WebGLRSSampler {
12            context: self,
13            inner: self._create_sampler(),
14        }
15    }
16}
17
18#[derive(Clone)]
19pub struct WebGLRSSampler<'ctx> {
20    context: &'ctx WebGL2RenderingContext,
21    inner: WebGLSampler,
22}
23
24impl<'ctx> WebGLRSSampler<'ctx> {
25    /// Deletes this `WebGLRSSampler` object.
26    pub fn delete(self) {
27        self.context._delete_sampler(self.inner);
28    }
29
30    /// Binds this `WebGLRSSampler` object to the texture unit at the passed index.
31    ///
32    /// # Arguments
33    /// * `unit` - specifying the index of the texture unit to which to bind the sampler to.
34    pub fn bind(&self, unit: u32) {
35        self.context._bind_sampler(unit, &self.inner);
36    }
37
38    /// Returns true if this is a valid `WebGLRSSampler` object.
39    pub fn is_valid(&self) -> bool {
40        self.context._is_sampler(&self.inner)
41    }
42
43    /// Returns the texture comparison function for this `WebGLRSSampler` object.
44    pub fn texture_compare_func(&self) -> DepthTest {
45        self.context
46            ._get_sampler_parameter_enum1(&self.inner, TextureParameter::CompareFunc)
47    }
48    /// Sets the texture comparison function for this `WebGLRSSampler` object.
49    pub fn set_texture_compare_func(&self, value: DepthTest) {
50        self.context
51            ._sampler_parameter_i(&self.inner, TextureParameter::CompareFunc, value as i32);
52    }
53
54    /// Returns the texture comparison mode for this `WebGLRSSampler` object.
55    pub fn texture_compare_mode(&self) -> CompareMode {
56        self.context
57            ._get_sampler_parameter_enum2(&self.inner, TextureParameter::CompareMode)
58    }
59    /// Sets the texture comparison mode for this `WebGLRSSampler` object.
60    pub fn set_texture_compare_mode(&self, value: CompareMode) {
61        self.context
62            ._sampler_parameter_i(&self.inner, TextureParameter::CompareMode, value as i32);
63    }
64
65    /// Returns the texture magnification filter for this `WebGLRSSampler` object.
66    pub fn texture_mag_filter(&self) -> TextureMagFilter {
67        self.context
68            ._get_sampler_parameter_enum3(&self.inner, TextureParameter::MagFilter)
69    }
70    /// Sets the texture magnification filter for this `WebGLRSSampler` object.
71    pub fn set_texture_mag_filter(&self, value: TextureMagFilter) {
72        self.context
73            ._sampler_parameter_i(&self.inner, TextureParameter::MagFilter, value as i32);
74    }
75
76    /// Returns the maximum level-of-detail value for this `WebGLRSSampler` object.
77    pub fn texture_max_lod(&self) -> f32 {
78        self.context
79            ._get_sampler_parameter_f32(&self.inner, TextureParameter::MaxLod)
80    }
81    /// Sets the maximum level-of-detail value for this `WebGLRSSampler` object.
82    pub fn set_texture_max_lod(&self, value: f32) {
83        self.context
84            ._sampler_parameter_f(&self.inner, TextureParameter::MaxLod, value);
85    }
86
87    /// Returns the texture minification filter for this `WebGLRSSampler` object
88    pub fn texture_min_filter(&self) -> TextureMinFilter {
89        self.context
90            ._get_sampler_parameter_enum4(&self.inner, TextureParameter::MinFilter)
91    }
92    /// Sets the texture minification filter for this `WebGLRSSampler` object
93    pub fn set_texture_min_filter(&self, value: TextureMinFilter) {
94        self.context
95            ._sampler_parameter_i(&self.inner, TextureParameter::MinFilter, value as i32);
96    }
97
98    /// Returns the minimum level-of-detail value for this `WebGLRSSampler` object.
99    pub fn texture_min_lod(&self) -> f32 {
100        self.context
101            ._get_sampler_parameter_f32(&self.inner, TextureParameter::MinLod)
102    }
103    /// Sets the minimum level-of-detail value for this `WebGLRSSampler` object.
104    pub fn set_texture_min_lod(&self, value: f32) {
105        self.context
106            ._sampler_parameter_f(&self.inner, TextureParameter::MinLod, value);
107    }
108
109    /// Returns the texture wrapping function for the texture coordinate r for this `WebGLRSSampler` object.
110    pub fn texture_wrap_r(&self) -> TextureWrap {
111        self.context
112            ._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapR)
113    }
114    /// Sets the texture wrapping function for the texture coordinate r for this `WebGLRSSampler` object.
115    pub fn set_texture_wrap_r(&self, value: TextureWrap) {
116        self.context
117            ._sampler_parameter_i(&self.inner, TextureParameter::WrapR, value as i32);
118    }
119
120    /// Return the texture wrapping function for the texture coordinate s for this `WebGLRSSampler` object.
121    pub fn texture_wrap_s(&self) -> TextureWrap {
122        self.context
123            ._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapS)
124    }
125    /// Sets the texture wrapping function for the texture coordinate s for this `WebGLRSSampler` object.
126    pub fn set_texture_wrap_s(&self, value: TextureWrap) {
127        self.context
128            ._sampler_parameter_i(&self.inner, TextureParameter::WrapS, value as i32);
129    }
130
131    /// Returns the texture wrapping function for the texture coordinate t for this `WebGLRSSampler` object.
132    pub fn texture_wrap_t(&self) -> TextureWrap {
133        self.context
134            ._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapT)
135    }
136    /// Sets the texture wrapping function for the texture coordinate t for this `WebGLRSSampler` object.
137    pub fn set_texture_wrap_t(&self, value: TextureWrap) {
138        self.context
139            ._sampler_parameter_i(&self.inner, TextureParameter::WrapT, value as i32);
140    }
141}
142
143/// Bindings for WebGLSampler
144#[wasm_bindgen]
145#[derive(Clone, Copy)]
146extern "C" {
147    #[derive(Clone)]
148    type WebGLSampler;
149
150    /// Binding for `WebGL2RenderingContext.createSampler()`
151    #[wasm_bindgen(method, js_name = createSampler)]
152    fn _create_sampler(this: &WebGL2RenderingContext) -> WebGLSampler;
153
154    /// Binding for `WebGL2RenderingContext.deleteSampler()`.
155    #[wasm_bindgen(method, js_name = deleteSampler)]
156    fn _delete_sampler(this: &WebGL2RenderingContext, sampler: WebGLSampler);
157
158    /// Binding for `WebGL2RenderingContext.bindSampler()`
159    #[wasm_bindgen(method, js_name = bindSampler)]
160    fn _bind_sampler(this: &WebGL2RenderingContext, unit: u32, sampler: &WebGLSampler);
161
162    /// Binding for `WebGL2RenderingContext.isSampler()`
163    #[wasm_bindgen(method, js_name = isSampler)]
164    fn _is_sampler(this: &WebGL2RenderingContext, sampler: &WebGLSampler) -> bool;
165
166    /// Binding for `WebGL2RenderingContext.getSamplerParameter()` when return type is `f32`
167    #[wasm_bindgen(method, js_name = getSamplerParameter)]
168    fn _get_sampler_parameter_f32(
169        this: &WebGL2RenderingContext,
170        sampler: &WebGLSampler,
171        pname: TextureParameter,
172    ) -> f32;
173    /// Binding for `WebGL2RenderingContext.getSamplerParameter()` when return type is `DepthTest`
174    #[wasm_bindgen(method, js_name = getSamplerParameter)]
175    fn _get_sampler_parameter_enum1(
176        this: &WebGL2RenderingContext,
177        sampler: &WebGLSampler,
178        pname: TextureParameter,
179    ) -> DepthTest;
180    /// Binding for `WebGL2RenderingContext.getSamplerParameter()` when return type is `CompareMode`
181    #[wasm_bindgen(method, js_name = getSamplerParameter)]
182    fn _get_sampler_parameter_enum2(
183        this: &WebGL2RenderingContext,
184        sampler: &WebGLSampler,
185        pname: TextureParameter,
186    ) -> CompareMode;
187    /// Binding for `WebGL2RenderingContext.getSamplerParameter()` when return type is `TextureMagFilter`
188    #[wasm_bindgen(method, js_name = getSamplerParameter)]
189    fn _get_sampler_parameter_enum3(
190        this: &WebGL2RenderingContext,
191        sampler: &WebGLSampler,
192        pname: TextureParameter,
193    ) -> TextureMagFilter;
194    /// Binding for `WebGL2RenderingContext.getSamplerParameter()` when return type is `TextureMinFilter`
195    #[wasm_bindgen(method, js_name = getSamplerParameter)]
196    fn _get_sampler_parameter_enum4(
197        this: &WebGL2RenderingContext,
198        sampler: &WebGLSampler,
199        pname: TextureParameter,
200    ) -> TextureMinFilter;
201    /// Binding for `WebGL2RenderingContext.getSamplerParameter()` when return type is `TextureWrap`
202    #[wasm_bindgen(method, js_name = getSamplerParameter)]
203    fn _get_sampler_parameter_enum5(
204        this: &WebGL2RenderingContext,
205        sampler: &WebGLSampler,
206        pname: TextureParameter,
207    ) -> TextureWrap;
208
209    /// Binding for `WebGL2RenderingContext.samplerParameteri()`
210    #[wasm_bindgen(method, js_name = samplerParameteri)]
211    fn _sampler_parameter_i(
212        this: &WebGL2RenderingContext,
213        sampler: &WebGLSampler,
214        pname: TextureParameter,
215        param: i32,
216    );
217
218    /// Binding for `WebGL2RenderingContext.samplerParameterf()`
219    #[wasm_bindgen(method, js_name = samplerParameterf)]
220    fn _sampler_parameter_f(
221        this: &WebGL2RenderingContext,
222        sampler: &WebGLSampler,
223        pname: TextureParameter,
224        param: f32,
225    );
226}