gpu/data/
renderbuffer.rs

1use crate::prelude::*;
2use crate::{Context, GLContext};
3
4type RenderbufferResource = <glow::Context as HasContext>::Renderbuffer;
5
6/// Renderbuffer representation.
7pub struct Renderbuffer {
8    gl       : GLContext,
9    resource : RenderbufferResource
10}
11
12impl Renderbuffer {
13    /// Creates a default `Renderbuffer`.
14    pub fn default(context:&Context) -> Self {
15        let resource = Default::default();
16        let gl       = context.gl_context();
17        Self { resource, gl }
18    }
19
20    /// Creates a new `Renderbuffer` with `(width, height)` dimensions.
21    pub fn new(context:&Context, width: u32, height: u32) -> Self {
22        let gl       = context.gl_context();
23        let width    = width as i32;
24        let height   = height as i32;
25        let resource = unsafe {
26            let resource = gl.create_renderbuffer().expect("Couldn't create Renderbuffer");
27            gl.bind_renderbuffer(glow::RENDERBUFFER, Some(resource));
28            gl.renderbuffer_storage(glow::RENDERBUFFER, glow::DEPTH_COMPONENT, width, height);
29            resource
30        };
31        Self { gl, resource }
32    }
33
34    /// Gets the `RenderbufferResource`.
35    pub fn resource(&self) -> RenderbufferResource {
36        self.resource
37    }
38}
39
40impl Drop for Renderbuffer {
41    fn drop(&mut self) {
42        unsafe {
43            self.gl.delete_renderbuffer(self.resource());
44        }
45    }
46}