wrend/framebuffers/
framebuffer_link_js.rs1use 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}