wrend/framebuffers/
framebuffer_link.rs1use crate::{FramebufferCreateCallback, FramebufferCreateContext, Id, IdDefault};
2use std::fmt::Debug;
3use std::hash::Hash;
4use web_sys::{WebGl2RenderingContext, WebGlFramebuffer, WebGlTexture};
5
6#[derive(Clone)]
7pub struct FramebufferLink<FramebufferId: Id, TextureId: Id = IdDefault> {
8 framebuffer_id: FramebufferId,
9 texture_id: Option<TextureId>,
10 framebuffer_create_callback: FramebufferCreateCallback,
11}
12
13impl<FramebufferId: Id, TextureId: Id> FramebufferLink<FramebufferId, TextureId> {
14 pub fn new(
15 framebuffer_id: FramebufferId,
16 framebuffer_create_callback: impl Into<FramebufferCreateCallback>,
17 texture_id: Option<TextureId>,
18 ) -> Self {
19 Self {
20 framebuffer_id,
21 framebuffer_create_callback: framebuffer_create_callback.into(),
22 texture_id,
23 }
24 }
25
26 pub fn framebuffer_id(&self) -> &FramebufferId {
27 &self.framebuffer_id
28 }
29
30 pub fn texture_id(&self) -> Option<TextureId> {
31 self.texture_id.clone()
32 }
33
34 pub fn create_framebuffer(
35 &self,
36 gl: WebGl2RenderingContext,
37 now: f64,
38 texture: Option<WebGlTexture>,
39 ) -> WebGlFramebuffer {
40 let framebuffer_create_context = FramebufferCreateContext::new(gl, now, texture);
41 self.framebuffer_create_callback
42 .call_with_into_js_arg_and_return(&framebuffer_create_context)
43 }
44}
45
46impl<FramebufferId: Id, TextureId: Id> Debug for FramebufferLink<FramebufferId, TextureId> {
47 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48 f.debug_struct("FramebufferLink")
49 .field("framebuffer_id", &self.framebuffer_id)
50 .finish()
51 }
52}
53
54impl<FramebufferId: Id, TextureId: Id> Hash for FramebufferLink<FramebufferId, TextureId> {
55 fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
56 self.framebuffer_id.hash(state);
57 }
58}
59
60impl<FramebufferId: Id, TextureId: Id> PartialEq for FramebufferLink<FramebufferId, TextureId> {
61 fn eq(&self, other: &Self) -> bool {
62 self.framebuffer_id == other.framebuffer_id
63 }
64}
65
66impl<FramebufferId: Id, TextureId: Id> Eq for FramebufferLink<FramebufferId, TextureId> {}