/* * RFB_CheckObjectStatus * * Boolean, returns false in case of error */ bool RFB_CheckObjectStatus( void ) { GLenum status; if( !r_frambuffer_objects_initialized ) { return false; } status = qglCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT ); switch( status ) { case GL_FRAMEBUFFER_COMPLETE_EXT: return true; case GL_FRAMEBUFFER_UNSUPPORTED_EXT: return false; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT ); return false; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT ); return false; case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT ); return false; case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT ); return false; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT ); return false; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT ); return false; case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT: assert( status != GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT ); return false; default: // programming error; will fail on all hardware assert( 0 ); } return false; }
/* * RFB_CheckObjectStatus * * Boolean, returns false in case of error */ bool RFB_CheckObjectStatus( void ) { GLenum status; if( !r_frambuffer_objects_initialized ) return false; status = qglCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT ); switch( status ) { case GL_FRAMEBUFFER_COMPLETE_EXT: return true; case GL_FRAMEBUFFER_UNSUPPORTED_EXT: return false; default: // programming error; will fail on all hardware assert( 0 ); } return false; }
GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target) { GL_BindFramebuffer(target, framebuffer); return qglCheckFramebufferStatusEXT(target); }
/* ============= R_CheckFBO ============= */ qboolean R_CheckFBO(const FBO_t * fbo) { int code; int id; qglGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &id); qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo->frameBuffer); code = qglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); if(code == GL_FRAMEBUFFER_COMPLETE_EXT) { qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); return qtrue; } // an error occured switch (code) { case GL_FRAMEBUFFER_COMPLETE_EXT: break; case GL_FRAMEBUFFER_UNSUPPORTED_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Unsupported framebuffer format\n", fbo->name); break; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete attachment\n", fbo->name); break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete, missing attachment\n", fbo->name); break; //case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: // ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete, duplicate attachment\n", fbo->name); // break; case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete, attached images must have same dimensions\n", fbo->name); break; case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete, attached images must have same format\n", fbo->name); break; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete, missing draw buffer\n", fbo->name); break; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) Framebuffer incomplete, missing read buffer\n", fbo->name); break; default: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) unknown error 0x%X\n", fbo->name, code); //ri.Error(ERR_FATAL, "R_CheckFBO: (%s) unknown error 0x%X", fbo->name, code); //assert(0); break; } qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); return qfalse; }