Skip to content

Instantly share code, notes, and snippets.

@branan
Created June 4, 2011 20:00
Show Gist options
  • Save branan/1008289 to your computer and use it in GitHub Desktop.
Save branan/1008289 to your computer and use it in GitHub Desktop.
GL error handling
static const char* glErrorString(GLenum err) {
switch(err) {
case GL_INVALID_ENUM: return "Invalid Enum";
case GL_INVALID_VALUE: return "Invalid Value";
case GL_INVALID_OPERATION: return "Invalid Operation";
case GL_STACK_OVERFLOW: return "Stack Overflow";
case GL_STACK_UNDERFLOW: return "Stack Underflow";
case GL_OUT_OF_MEMORY: return "Out of Memory";
case GL_TABLE_TOO_LARGE: return "Table too Large";
default: return "Unknown Error";
}
}
static const char* fboErrorString(GLenum status) {
switch(status) {
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: return "Incomplete Attachment";
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: return "Missing Attachment";
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: return "Incomplete Draw Buffer";
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: return "Incomplete Read Buffer";
case GL_FRAMEBUFFER_UNSUPPORTED: return "Unsupposed Configuration";
default: return "Unknown Error";
}
}
class gl_error : public std::runtime_error {
public:
gl_error(std::string location, GLenum err) : std::runtime_error(glErrorString(err)+location) {}
};
class fbo_error : public std::runtime_error {
public:
fbo_error(std::string location, GLenum status) : std::runtime_error(fboErrorString(status)+location) {}
};
#define STRING(X) #X
#define TOSTRING(X) STRING(X)
#define FILE_LINE " @ " __FILE__ ":" TOSTRING(__LINE__)
#ifndef NDEBUG
#define GL_CHECK(func) func; { GLenum glerr = glGetError(); if(GL_NO_ERROR != glerr) throw gl_error(FILE_LINE, glerr); }
#define FBO_CHECK { GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(GL_FRAMEBUFFER_COMPLETE != status) throw fbo_error(FILE_LINE, status); }
#else
#define GL_CHECK(func) func;
#define FBO_CHECK
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment