1use glenum::FramebufferKind;
3use rendering_context::WebGL2RenderingContext;
4use wasm_bindgen::prelude::*;
5
6impl WebGL2RenderingContext {
7 pub fn create_framebuffer(&self) -> WebGLRSFramebuffer {
9 WebGLRSFramebuffer {
10 context: self,
11 inner: self._create_framebuffer(),
12 }
13 }
14}
15
16#[derive(Clone)]
21pub struct WebGLRSFramebuffer<'ctx> {
22 context: &'ctx WebGL2RenderingContext,
23 inner: WebGLFramebuffer,
24}
25
26impl<'ctx> WebGLRSFramebuffer<'ctx> {
27 pub fn bind(&self, target: FramebufferKind) {
32 self.context._bind_framebuffer(target, &self.inner);
33 }
34
35 pub fn is_valid(&self) -> bool {
37 self.context._is_framebuffer(&self.inner)
38 }
39
40 pub fn delete(self) {
42 self.context._delete_framebuffer(self.inner);
43 }
44}
45
46#[wasm_bindgen]
48#[derive(Clone, Copy)]
49extern "C" {
50 #[derive(Clone)]
51 type WebGLFramebuffer;
52 #[wasm_bindgen(method, js_name = createFramebuffer)]
54 fn _create_framebuffer(this: &WebGL2RenderingContext) -> WebGLFramebuffer;
55
56 #[wasm_bindgen(method, js_name = bindFramebuffer)]
58 fn _bind_framebuffer(
59 this: &WebGL2RenderingContext,
60 target: FramebufferKind,
61 framebuffer: &WebGLFramebuffer,
62 );
63
64 #[wasm_bindgen(method, js_name = deleteFramebuffer)]
66 fn _delete_framebuffer(this: &WebGL2RenderingContext, framebuffer: WebGLFramebuffer);
67
68 #[wasm_bindgen(method, js_name = isFramebuffer)]
70 fn _is_framebuffer(this: &WebGL2RenderingContext, framebuffer: &WebGLFramebuffer) -> bool;
71}