wrend/textures/
texture_link_js.rs

1use std::ops::{Deref, DerefMut};
2
3use wasm_bindgen::prelude::wasm_bindgen;
4use web_sys::{HtmlCanvasElement, WebGl2RenderingContext, WebGlTexture};
5
6use crate::{TextureCreateCallbackJs, TextureLink};
7
8pub type TextureLinkJsInner = TextureLink<String>;
9
10#[wasm_bindgen(inspectable, js_name = TextureLink)]
11pub struct TextureLinkJs(TextureLinkJsInner);
12
13#[wasm_bindgen(js_class = TextureLink)]
14impl TextureLinkJs {
15    #[wasm_bindgen(constructor)]
16    pub fn new(texture_id: String, create_texture_callback: TextureCreateCallbackJs) -> Self {
17        Self(TextureLinkJsInner::new(texture_id, create_texture_callback))
18    }
19
20    #[wasm_bindgen(js_name = textureId)]
21    pub fn texture_id(&self) -> String {
22        self.deref().texture_id().to_owned()
23    }
24
25    #[wasm_bindgen(js_name = createTexture)]
26    pub fn create_texture(
27        &self,
28        gl: WebGl2RenderingContext,
29        now: f64,
30        canvas: HtmlCanvasElement,
31    ) -> WebGlTexture {
32        self.deref().create_texture(gl, now, canvas)
33    }
34}
35
36impl TextureLinkJs {
37    pub fn into_inner(self) -> TextureLinkJsInner {
38        self.0
39    }
40}
41
42impl Deref for TextureLinkJs {
43    type Target = TextureLinkJsInner;
44
45    fn deref(&self) -> &Self::Target {
46        &self.0
47    }
48}
49
50impl DerefMut for TextureLinkJs {
51    fn deref_mut(&mut self) -> &mut TextureLinkJsInner {
52        &mut self.0
53    }
54}
55
56impl From<TextureLinkJs> for TextureLinkJsInner {
57    fn from(buffer_link_js: TextureLinkJs) -> Self {
58        buffer_link_js.into_inner()
59    }
60}