1use crate::prelude::*;
2use crate::{Context, GLContext};
3
4type RenderbufferResource = <glow::Context as HasContext>::Renderbuffer;
5
6pub struct Renderbuffer {
8 gl : GLContext,
9 resource : RenderbufferResource
10}
11
12impl Renderbuffer {
13 pub fn default(context:&Context) -> Self {
15 let resource = Default::default();
16 let gl = context.gl_context();
17 Self { resource, gl }
18 }
19
20 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 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}