wrend/framebuffers/
framebuffer.rs

1use crate::{FramebufferJs, FramebufferJsInner, Id};
2use std::fmt::Debug;
3use std::hash::Hash;
4use wasm_bindgen::JsValue;
5use web_sys::WebGlFramebuffer;
6
7#[derive(Clone)]
8pub struct Framebuffer<FramebufferId: Id> {
9    framebuffer_id: FramebufferId,
10    webgl_framebuffer: WebGlFramebuffer,
11}
12
13impl<FramebufferId: Id> Framebuffer<FramebufferId> {
14    // @todo move into builder pattern ?
15    pub fn new(framebuffer_id: FramebufferId, webgl_framebuffer: WebGlFramebuffer) -> Self {
16        Self {
17            framebuffer_id,
18            webgl_framebuffer,
19        }
20    }
21
22    pub fn framebuffer_id(&self) -> &FramebufferId {
23        &self.framebuffer_id
24    }
25
26    pub fn webgl_framebuffer(&self) -> &WebGlFramebuffer {
27        &self.webgl_framebuffer
28    }
29}
30
31impl<FramebufferId: Id> Debug for Framebuffer<FramebufferId> {
32    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33        f.debug_struct("Framebuffer")
34            .field("framebuffer_id", &self.framebuffer_id)
35            .field("webgl_framebuffer", &self.webgl_framebuffer)
36            .finish()
37    }
38}
39impl<FramebufferId: Id> Hash for Framebuffer<FramebufferId> {
40    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
41        self.framebuffer_id.hash(state);
42    }
43}
44
45impl<FramebufferId: Id> PartialEq for Framebuffer<FramebufferId> {
46    fn eq(&self, other: &Self) -> bool {
47        self.framebuffer_id == other.framebuffer_id
48            && self.webgl_framebuffer == other.webgl_framebuffer
49    }
50}
51
52impl<FramebufferId: Id> Eq for Framebuffer<FramebufferId> {}
53
54impl From<FramebufferJsInner> for JsValue {
55    fn from(framebuffer: FramebufferJsInner) -> Self {
56        let js_framebuffer: FramebufferJs = framebuffer.into();
57        js_framebuffer.into()
58    }
59}