diff --git a/Cargo.toml b/Cargo.toml index 41b64d7b..01980577 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ path = "src/main.rs" # However, building with full -O3 optimizations takes too long for a debug build. # Use an -O1 optimization level strikes a good compromise between build and program performance. opt-level = 1 +debug-assertions = true [dependencies] cfg-if = "1.0.0" diff --git a/src/gl/mod.rs b/src/gl/mod.rs index 91f8d525..dde20a30 100644 --- a/src/gl/mod.rs +++ b/src/gl/mod.rs @@ -901,6 +901,61 @@ impl Framebuffer { ); } } + + pub fn renderbuffer(&self, attachment: Attachment, rb: &Renderbuffer) { + unsafe { + glow_context().framebuffer_renderbuffer( + gl::FRAMEBUFFER, + attachment, + gl::RENDERBUFFER, + Some(rb.0), + ); + } + } +} + +#[derive(Default)] +pub struct Renderbuffer(glow::Renderbuffer); + +impl Renderbuffer { + pub fn new() -> Renderbuffer { + Renderbuffer(unsafe { glow_context().create_renderbuffer().unwrap() }) + } + + pub fn bind(&self) { + unsafe { + glow_context().bind_renderbuffer(gl::RENDERBUFFER, Some(self.0)); + } + } + + pub fn storage(&self, width: u32, height: u32, format: TextureFormat) { + unsafe { + glow_context().renderbuffer_storage( + gl::RENDERBUFFER, + format, + width as i32, + height as i32, + ); + } + } + + pub fn storage_multisample( + &self, + samples: i32, + width: u32, + height: u32, + format: TextureFormat, + ) { + unsafe { + glow_context().renderbuffer_storage_multisample( + gl::RENDERBUFFER, + samples, + format, + width as i32, + height as i32, + ); + } + } } impl Drop for Framebuffer { diff --git a/src/render/mod.rs b/src/render/mod.rs index b1cc157b..001da452 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -761,7 +761,7 @@ impl Renderer { struct TransInfo { main: gl::Framebuffer, fb_color: gl::Texture, - _fb_depth: gl::Texture, + _fb_depth: gl::Renderbuffer, trans: gl::Framebuffer, accum: gl::Texture, revealage: gl::Texture, @@ -870,22 +870,15 @@ impl TransInfo { fb_color.set_parameter(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::LINEAR); main.texture_2d(gl::COLOR_ATTACHMENT_0, gl::TEXTURE_2D, &fb_color, 0); - let fb_depth = gl::Texture::new(); - fb_depth.bind(gl::TEXTURE_2D); - fb_depth.image_2d_ex( - gl::TEXTURE_2D, - 0, - width, - height, - gl::DEPTH_COMPONENT24, - gl::DEPTH_COMPONENT, - gl::UNSIGNED_BYTE, - None, - ); - fb_depth.set_parameter(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR); - fb_depth.set_parameter(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::LINEAR); - main.texture_2d(gl::DEPTH_ATTACHMENT, gl::TEXTURE_2D, &fb_depth, 0); + let fb_depth = gl::Renderbuffer::new(); + fb_depth.bind(); + fb_depth.storage(width, height, gl::DEPTH_COMPONENT24); + //fb_depth.set_parameter(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR); + //fb_depth.set_parameter(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::LINEAR); + + //main.texture_2d(gl::DEPTH_ATTACHMENT, gl::TEXTURE_2D, &fb_depth, 0); + main.renderbuffer(gl::DEPTH_ATTACHMENT, &fb_depth); gl::check_framebuffer_status(); gl::unbind_framebuffer();