use glenum::{
CompareMode, DepthTest, TextureMagFilter, TextureMinFilter, TextureParameter, TextureWrap,
};
use rendering_context::WebGL2RenderingContext;
use wasm_bindgen::prelude::*;
impl WebGL2RenderingContext {
pub fn create_sampler(&self) -> WebGLRSSampler {
WebGLRSSampler {
context: self,
inner: self._create_sampler(),
}
}
}
#[derive(Clone)]
pub struct WebGLRSSampler<'ctx> {
context: &'ctx WebGL2RenderingContext,
inner: WebGLSampler,
}
impl<'ctx> WebGLRSSampler<'ctx> {
pub fn delete(self) {
self.context._delete_sampler(self.inner);
}
pub fn bind(&self, unit: u32) {
self.context._bind_sampler(unit, &self.inner);
}
pub fn is_valid(&self) -> bool {
self.context._is_sampler(&self.inner)
}
pub fn texture_compare_func(&self) -> DepthTest {
self.context
._get_sampler_parameter_enum1(&self.inner, TextureParameter::CompareFunc)
}
pub fn set_texture_compare_func(&self, value: DepthTest) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::CompareFunc, value as i32);
}
pub fn texture_compare_mode(&self) -> CompareMode {
self.context
._get_sampler_parameter_enum2(&self.inner, TextureParameter::CompareMode)
}
pub fn set_texture_compare_mode(&self, value: CompareMode) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::CompareMode, value as i32);
}
pub fn texture_mag_filter(&self) -> TextureMagFilter {
self.context
._get_sampler_parameter_enum3(&self.inner, TextureParameter::MagFilter)
}
pub fn set_texture_mag_filter(&self, value: TextureMagFilter) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::MagFilter, value as i32);
}
pub fn texture_max_lod(&self) -> f32 {
self.context
._get_sampler_parameter_f32(&self.inner, TextureParameter::MaxLod)
}
pub fn set_texture_max_lod(&self, value: f32) {
self.context
._sampler_parameter_f(&self.inner, TextureParameter::MaxLod, value);
}
pub fn texture_min_filter(&self) -> TextureMinFilter {
self.context
._get_sampler_parameter_enum4(&self.inner, TextureParameter::MinFilter)
}
pub fn set_texture_min_filter(&self, value: TextureMinFilter) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::MinFilter, value as i32);
}
pub fn texture_min_lod(&self) -> f32 {
self.context
._get_sampler_parameter_f32(&self.inner, TextureParameter::MinLod)
}
pub fn set_texture_min_lod(&self, value: f32) {
self.context
._sampler_parameter_f(&self.inner, TextureParameter::MinLod, value);
}
pub fn texture_wrap_r(&self) -> TextureWrap {
self.context
._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapR)
}
pub fn set_texture_wrap_r(&self, value: TextureWrap) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::WrapR, value as i32);
}
pub fn texture_wrap_s(&self) -> TextureWrap {
self.context
._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapS)
}
pub fn set_texture_wrap_s(&self, value: TextureWrap) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::WrapS, value as i32);
}
pub fn texture_wrap_t(&self) -> TextureWrap {
self.context
._get_sampler_parameter_enum5(&self.inner, TextureParameter::WrapT)
}
pub fn set_texture_wrap_t(&self, value: TextureWrap) {
self.context
._sampler_parameter_i(&self.inner, TextureParameter::WrapT, value as i32);
}
}
#[wasm_bindgen]
#[derive(Clone, Copy)]
extern "C" {
#[derive(Clone)]
type WebGLSampler;
#[wasm_bindgen(method, js_name = createSampler)]
fn _create_sampler(this: &WebGL2RenderingContext) -> WebGLSampler;
#[wasm_bindgen(method, js_name = deleteSampler)]
fn _delete_sampler(this: &WebGL2RenderingContext, sampler: WebGLSampler);
#[wasm_bindgen(method, js_name = bindSampler)]
fn _bind_sampler(this: &WebGL2RenderingContext, unit: u32, sampler: &WebGLSampler);
#[wasm_bindgen(method, js_name = isSampler)]
fn _is_sampler(this: &WebGL2RenderingContext, sampler: &WebGLSampler) -> bool;
#[wasm_bindgen(method, js_name = getSamplerParameter)]
fn _get_sampler_parameter_f32(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
) -> f32;
#[wasm_bindgen(method, js_name = getSamplerParameter)]
fn _get_sampler_parameter_enum1(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
) -> DepthTest;
#[wasm_bindgen(method, js_name = getSamplerParameter)]
fn _get_sampler_parameter_enum2(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
) -> CompareMode;
#[wasm_bindgen(method, js_name = getSamplerParameter)]
fn _get_sampler_parameter_enum3(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
) -> TextureMagFilter;
#[wasm_bindgen(method, js_name = getSamplerParameter)]
fn _get_sampler_parameter_enum4(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
) -> TextureMinFilter;
#[wasm_bindgen(method, js_name = getSamplerParameter)]
fn _get_sampler_parameter_enum5(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
) -> TextureWrap;
#[wasm_bindgen(method, js_name = samplerParameteri)]
fn _sampler_parameter_i(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
param: i32,
);
#[wasm_bindgen(method, js_name = samplerParameterf)]
fn _sampler_parameter_f(
this: &WebGL2RenderingContext,
sampler: &WebGLSampler,
pname: TextureParameter,
param: f32,
);
}