1use glenum::{
3 CompareMode, DepthTest, TextureMagFilter, TextureMinFilter, TextureParameter, TextureWrap,
4};
5use rendering_context::WebGL2RenderingContext;
6use wasm_bindgen::prelude::*;
7
8impl WebGL2RenderingContext {
9 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 pub fn delete(self) {
27 self.context._delete_sampler(self.inner);
28 }
29
30 pub fn bind(&self, unit: u32) {
35 self.context._bind_sampler(unit, &self.inner);
36 }
37
38 pub fn is_valid(&self) -> bool {
40 self.context._is_sampler(&self.inner)
41 }
42
43 pub fn texture_compare_func(&self) -> DepthTest {
45 self.context
46 ._get_sampler_parameter_enum1(&self.inner, TextureParameter::CompareFunc)
47 }
48 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 pub fn texture_compare_mode(&self) -> CompareMode {
56 self.context
57 ._get_sampler_parameter_enum2(&self.inner, TextureParameter::CompareMode)
58 }
59 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 pub fn texture_mag_filter(&self) -> TextureMagFilter {
67 self.context
68 ._get_sampler_parameter_enum3(&self.inner, TextureParameter::MagFilter)
69 }
70 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 pub fn texture_max_lod(&self) -> f32 {
78 self.context
79 ._get_sampler_parameter_f32(&self.inner, TextureParameter::MaxLod)
80 }
81 pub fn set_texture_max_lod(&self, value: f32) {
83 self.context
84 ._sampler_parameter_f(&self.inner, TextureParameter::MaxLod, value);
85 }
86
87 pub fn texture_min_filter(&self) -> TextureMinFilter {
89 self.context
90 ._get_sampler_parameter_enum4(&self.inner, TextureParameter::MinFilter)
91 }
92 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 pub fn texture_min_lod(&self) -> f32 {
100 self.context
101 ._get_sampler_parameter_f32(&self.inner, TextureParameter::MinLod)
102 }
103 pub fn set_texture_min_lod(&self, value: f32) {
105 self.context
106 ._sampler_parameter_f(&self.inner, TextureParameter::MinLod, value);
107 }
108
109 pub fn texture_wrap_r(&self) -> TextureWrap {
111 self.context
112 ._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapR)
113 }
114 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 pub fn texture_wrap_s(&self) -> TextureWrap {
122 self.context
123 ._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapS)
124 }
125 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 pub fn texture_wrap_t(&self) -> TextureWrap {
133 self.context
134 ._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapT)
135 }
136 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#[wasm_bindgen]
145#[derive(Clone, Copy)]
146extern "C" {
147 #[derive(Clone)]
148 type WebGLSampler;
149
150 #[wasm_bindgen(method, js_name = createSampler)]
152 fn _create_sampler(this: &WebGL2RenderingContext) -> WebGLSampler;
153
154 #[wasm_bindgen(method, js_name = deleteSampler)]
156 fn _delete_sampler(this: &WebGL2RenderingContext, sampler: WebGLSampler);
157
158 #[wasm_bindgen(method, js_name = bindSampler)]
160 fn _bind_sampler(this: &WebGL2RenderingContext, unit: u32, sampler: &WebGLSampler);
161
162 #[wasm_bindgen(method, js_name = isSampler)]
164 fn _is_sampler(this: &WebGL2RenderingContext, sampler: &WebGLSampler) -> bool;
165
166 #[wasm_bindgen(method, js_name = getSamplerParameter)]
168 fn _get_sampler_parameter_f32(
169 this: &WebGL2RenderingContext,
170 sampler: &WebGLSampler,
171 pname: TextureParameter,
172 ) -> f32;
173 #[wasm_bindgen(method, js_name = getSamplerParameter)]
175 fn _get_sampler_parameter_enum1(
176 this: &WebGL2RenderingContext,
177 sampler: &WebGLSampler,
178 pname: TextureParameter,
179 ) -> DepthTest;
180 #[wasm_bindgen(method, js_name = getSamplerParameter)]
182 fn _get_sampler_parameter_enum2(
183 this: &WebGL2RenderingContext,
184 sampler: &WebGLSampler,
185 pname: TextureParameter,
186 ) -> CompareMode;
187 #[wasm_bindgen(method, js_name = getSamplerParameter)]
189 fn _get_sampler_parameter_enum3(
190 this: &WebGL2RenderingContext,
191 sampler: &WebGLSampler,
192 pname: TextureParameter,
193 ) -> TextureMagFilter;
194 #[wasm_bindgen(method, js_name = getSamplerParameter)]
196 fn _get_sampler_parameter_enum4(
197 this: &WebGL2RenderingContext,
198 sampler: &WebGLSampler,
199 pname: TextureParameter,
200 ) -> TextureMinFilter;
201 #[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 #[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 #[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}