webgl_rs/
framebuffer.rs

1//! WebGLFramebuffer and methods
2use glenum::FramebufferKind;
3use rendering_context::WebGL2RenderingContext;
4use wasm_bindgen::prelude::*;
5
6impl WebGL2RenderingContext {
7    /// Creates and initializes a new `WebGLRSFramebuffer` object
8    pub fn create_framebuffer(&self) -> WebGLRSFramebuffer {
9        WebGLRSFramebuffer {
10            context: self,
11            inner: self._create_framebuffer(),
12        }
13    }
14}
15
16/// Collection of buffers to be used as a rendering destination
17///
18/// The `WebGLFramebuffer` interface is part of the WebGL API and represents a collection of buffers that
19/// serve as a rendering destination.
20#[derive(Clone)]
21pub struct WebGLRSFramebuffer<'ctx> {
22    context: &'ctx WebGL2RenderingContext,
23    inner: WebGLFramebuffer,
24}
25
26impl<'ctx> WebGLRSFramebuffer<'ctx> {
27    /// Binds this buffer to a given target
28    ///
29    /// # Arguments
30    /// * `target` - specifying the binding point.
31    pub fn bind(&self, target: FramebufferKind) {
32        self.context._bind_framebuffer(target, &self.inner);
33    }
34
35    /// Returns `true` if this is a valid `WebGLRSFramebuffer` object
36    pub fn is_valid(&self) -> bool {
37        self.context._is_framebuffer(&self.inner)
38    }
39
40    /// Deletes this `WebGLRSFramebuffer` object
41    pub fn delete(self) {
42        self.context._delete_framebuffer(self.inner);
43    }
44}
45
46/// WebGLFramebuffer bindings
47#[wasm_bindgen]
48#[derive(Clone, Copy)]
49extern "C" {
50    #[derive(Clone)]
51    type WebGLFramebuffer;
52    /// Binding for `WebGLRenderingContext.createFramebuffer()`
53    #[wasm_bindgen(method, js_name = createFramebuffer)]
54    fn _create_framebuffer(this: &WebGL2RenderingContext) -> WebGLFramebuffer;
55
56    /// Binding for `WebGLRenderingContext.bindFramebuffer()`
57    #[wasm_bindgen(method, js_name = bindFramebuffer)]
58    fn _bind_framebuffer(
59        this: &WebGL2RenderingContext,
60        target: FramebufferKind,
61        framebuffer: &WebGLFramebuffer,
62    );
63
64    /// Binding for `WebGLRenderingContext.deleteFramebuffer()`
65    #[wasm_bindgen(method, js_name = deleteFramebuffer)]
66    fn _delete_framebuffer(this: &WebGL2RenderingContext, framebuffer: WebGLFramebuffer);
67
68    /// Binding for `WebGLRenderingContext.isFramebuffer()`
69    #[wasm_bindgen(method, js_name = isFramebuffer)]
70    fn _is_framebuffer(this: &WebGL2RenderingContext, framebuffer: &WebGLFramebuffer) -> bool;
71}