Created
June 4, 2011 20:00
-
-
Save branan/1008289 to your computer and use it in GitHub Desktop.
GL error handling
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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