From 3a32710b175e78fc0f00a995a31c3994182b5c2f Mon Sep 17 00:00:00 2001 From: ice_iix Date: Sat, 6 Oct 2018 13:28:19 -0700 Subject: [PATCH] Check framebuffer status after each bind For https://github.com/iceiix/steven/issues/5 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT --- src/gl/mod.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/gl/mod.rs b/src/gl/mod.rs index e13d0da..a973df8 100644 --- a/src/gl/mod.rs +++ b/src/gl/mod.rs @@ -819,6 +819,31 @@ pub const DEPTH_ATTACHMENT: Attachment = gl::DEPTH_ATTACHMENT; pub struct Framebuffer(u32); +unsafe fn check_framebuffer_status() { + let status = gl::CheckFramebufferStatus(gl::FRAMEBUFFER); + let s = + match status { + gl::FRAMEBUFFER_UNDEFINED => "GL_FRAMEBUFFER_UNDEFINED", + gl::FRAMEBUFFER_INCOMPLETE_ATTACHMENT => "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT", + gl::FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT => "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", + gl::FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER => "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER", + gl::FRAMEBUFFER_INCOMPLETE_READ_BUFFER => "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER", + gl::FRAMEBUFFER_UNSUPPORTED => "GL_FRAMEBUFFER_UNSUPPORTED", + gl::FRAMEBUFFER_INCOMPLETE_MULTISAMPLE => "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE", + gl::FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS => "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS", + + gl::FRAMEBUFFER_COMPLETE => "GL_FRAMEBUFFER_COMPLETE", + //gl::FRAMEBUFFER_INCOMPLETE_DIMENSIONS => "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS", + _ => "unknown" + }; + + if status != gl::FRAMEBUFFER_COMPLETE { + println!("glBindFramebuffer failed, glCheckFrameBufferStatus(GL_FRAMEBUFFER) = {} {}", status, s); + //panic!("glBindFramebuffer failed, glCheckFrameBufferStatus(GL_FRAMEBUFFER) = {} {}", status, s); + } + +} + impl Framebuffer { pub fn new() -> Framebuffer { let mut fb = Framebuffer(0); @@ -831,18 +856,21 @@ impl Framebuffer { pub fn bind(&self) { unsafe { gl::BindFramebuffer(gl::FRAMEBUFFER, self.0); + check_framebuffer_status(); } } pub fn bind_read(&self) { unsafe { gl::BindFramebuffer(gl::READ_FRAMEBUFFER, self.0); + check_framebuffer_status(); } } pub fn bind_draw(&self) { unsafe { gl::BindFramebuffer(gl::DRAW_FRAMEBUFFER, self.0); + check_framebuffer_status(); } }