webgl_rs/
renderbuffer.rs

1//! WebGLRenderbuffer and methods
2use glenum::{Attachment, FramebufferKind, RenderbufferKind};
3use rendering_context::WebGL2RenderingContext;
4use wasm_bindgen::prelude::*;
5
6impl WebGL2RenderingContext {
7    /// Creates and initializes WebGLRSRenderbuffer object.
8    pub fn create_renderbuffer(&self) -> WebGLRSRenderbuffer {
9        WebGLRSRenderbuffer {
10            context: self,
11            inner: self._create_renderbuffer(),
12        }
13    }
14}
15
16/// The `WebGLRenderbuffer` interface is represents a buffer that can contain an image, or can be source
17/// or target of an rendering operation.
18#[derive(Clone)]
19pub struct WebGLRSRenderbuffer<'ctx> {
20    context: &'ctx WebGL2RenderingContext,
21    inner: WebGLRenderbuffer,
22}
23
24impl<'ctx> WebGLRSRenderbuffer<'ctx> {
25    /// Deletes the `WebGLRSRenderbuffer` object
26    pub fn delete(self) {
27        self.context._delete_renderbuffer(self.inner);
28    }
29
30    /// Returns true if the `WebGLRSRenderbuffer` object is valid and false otherwise.
31    pub fn is_valid(&self) -> bool {
32        self.context._is_renderbuffer(&self.inner)
33    }
34
35    /// Binds the `WebGLRSRenderbuffer` object to the given target.
36    ///
37    /// # Arguments
38    /// * `target` - specifying the binding point.
39    pub fn bind(&self, target: RenderbufferKind) {
40        self.context._bind_renderbuffer(target, &self.inner);
41    }
42
43    /// Attaches this `WebGLRSRenderbuffer` object to a framebuffer.
44    ///
45    /// # Arguments
46    /// * `fb_target` - specifying the binding point (target) for the framebuffer.
47    /// * `attachment` - specifying the attachment point for the render buffer.
48    /// * `rb_target` - specifying the binding point (target) for the render buffer.
49    pub fn attach_framebuffer(
50        &self,
51        fb_target: FramebufferKind,
52        attachment: Attachment,
53        rb_target: RenderbufferKind,
54    ) {
55        self.context
56            ._framebuffer_renderbuffer(fb_target, attachment, rb_target, &self.inner);
57    }
58}
59
60/// Bindings for WebGLRenderbuffer
61#[wasm_bindgen]
62#[derive(Clone, Copy)]
63extern "C" {
64    #[derive(Clone)]
65    type WebGLRenderbuffer;
66    /// Binding for `WebGLRenderingContext.createRenderbuffer()`
67    #[wasm_bindgen(method, js_name = createRenderbuffer)]
68    fn _create_renderbuffer(this: &WebGL2RenderingContext) -> WebGLRenderbuffer;
69
70    /// The `WebGLRenderingContext.framebufferRenderbuffer()` method of the WebGL API attaches a WebGLRenderbuffer object
71    /// to a WebGLFramebuffer object.
72    #[wasm_bindgen(method, js_name = framebufferRenderbuffer)]
73    fn _framebuffer_renderbuffer(
74        this: &WebGL2RenderingContext,
75        target: FramebufferKind,
76        attachment: Attachment,
77        renderbuffertarget: RenderbufferKind,
78        renderbuffer: &WebGLRenderbuffer,
79    );
80
81    /// The `WebGLRenderingContext.bindRenderbuffer()` method of the WebGL API binds a given WebGLRenderbuffer
82    /// to a target, which must be `gl.RENDERBUFFER`.
83    #[wasm_bindgen(method, js_name = bindRenderbuffer)]
84    fn _bind_renderbuffer(
85        this: &WebGL2RenderingContext,
86        target: RenderbufferKind,
87        renderbuffer: &WebGLRenderbuffer,
88    );
89
90    /// The `WebGLRenderingContext.deleteRenderbuffer()` method of the WebGL API deletes a given WebGLRenderbuffer
91    /// object. This method has no effect if the render buffer has already been deleted.
92    #[wasm_bindgen(method, js_name = deleteRenderbuffer)]
93    fn _delete_renderbuffer(this: &WebGL2RenderingContext, renderbuffer: WebGLRenderbuffer);
94
95    /// The `WebGLRenderingContext.isRenderbuffer()` method of the WebGL API returns true if the passed
96    /// WebGLRenderbuffer is valid and false otherwise.
97    #[wasm_bindgen(method, js_name = isRenderbuffer)]
98    fn _is_renderbuffer(this: &WebGL2RenderingContext, renderbuffer: &WebGLRenderbuffer) -> bool;
99
100}