wrend/framebuffers/
framebuffer_link_js.rs

1use std::ops::{Deref, DerefMut};
2
3use wasm_bindgen::prelude::wasm_bindgen;
4use web_sys::{WebGl2RenderingContext, WebGlFramebuffer, WebGlTexture};
5
6use crate::{FramebufferCreateCallbackJs, FramebufferLink};
7
8pub type FramebufferLinkJsInner = FramebufferLink<String, String>;
9
10#[wasm_bindgen(inspectable, js_name = FramebufferLink)]
11#[derive(Clone)]
12pub struct FramebufferLinkJs(FramebufferLinkJsInner);
13
14#[wasm_bindgen(js_class = FramebufferLink)]
15impl FramebufferLinkJs {
16    #[wasm_bindgen(constructor)]
17    pub fn new(
18        framebuffer_id: String,
19        framebuffer_create_callback: FramebufferCreateCallbackJs,
20        texture_id: Option<String>,
21    ) -> Self {
22        Self(FramebufferLinkJsInner::new(
23            framebuffer_id,
24            framebuffer_create_callback,
25            texture_id,
26        ))
27    }
28
29    #[wasm_bindgen(js_name = framebufferId)]
30    pub fn framebuffer_id(&self) -> String {
31        self.deref().framebuffer_id().to_owned()
32    }
33
34    #[wasm_bindgen(js_name = textureId)]
35    pub fn texture_id(&self) -> Option<String> {
36        self.deref().texture_id()
37    }
38
39    #[wasm_bindgen(js_name = createFramebuffer)]
40    pub fn create_framebuffer(
41        &self,
42        gl: WebGl2RenderingContext,
43        now: f64,
44        texture: Option<WebGlTexture>,
45    ) -> WebGlFramebuffer {
46        self.deref().create_framebuffer(gl, now, texture)
47    }
48}
49
50impl FramebufferLinkJs {
51    pub fn into_inner(self) -> FramebufferLinkJsInner {
52        self.0
53    }
54}
55
56impl Deref for FramebufferLinkJs {
57    type Target = FramebufferLinkJsInner;
58
59    fn deref(&self) -> &Self::Target {
60        &self.0
61    }
62}
63
64impl DerefMut for FramebufferLinkJs {
65    fn deref_mut(&mut self) -> &mut FramebufferLinkJsInner {
66        &mut self.0
67    }
68}
69
70impl From<FramebufferLinkJs> for FramebufferLinkJsInner {
71    fn from(framebuffer_link_js: FramebufferLinkJs) -> Self {
72        framebuffer_link_js.into_inner()
73    }
74}