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