1 #include <mbgl/gl/gl.hpp> 2 #include <mbgl/util/string.hpp> 3 #include <mbgl/util/util.hpp> 4 5 namespace mbgl { 6 namespace gl { 7 8 namespace { 9 stringFromError(GLenum err)10MBGL_CONSTEXPR const char* stringFromError(GLenum err) { 11 switch (err) { 12 case GL_INVALID_ENUM: 13 return "GL_INVALID_ENUM"; 14 15 case GL_INVALID_VALUE: 16 return "GL_INVALID_VALUE"; 17 18 case GL_INVALID_OPERATION: 19 return "GL_INVALID_OPERATION"; 20 21 case GL_INVALID_FRAMEBUFFER_OPERATION: 22 return "GL_INVALID_FRAMEBUFFER_OPERATION"; 23 24 case GL_OUT_OF_MEMORY: 25 return "GL_OUT_OF_MEMORY"; 26 27 #ifdef GL_TABLE_TOO_LARGE 28 case GL_TABLE_TOO_LARGE: 29 return "GL_TABLE_TOO_LARGE"; 30 #endif 31 32 #ifdef GL_STACK_OVERFLOW 33 case GL_STACK_OVERFLOW: 34 return "GL_STACK_OVERFLOW"; 35 #endif 36 37 #ifdef GL_STACK_UNDERFLOW 38 case GL_STACK_UNDERFLOW: 39 return "GL_STACK_UNDERFLOW"; 40 #endif 41 42 #ifdef GL_CONTEXT_LOST 43 case GL_CONTEXT_LOST: 44 return "GL_CONTEXT_LOST"; 45 #endif 46 47 default: 48 return "GL_UNKNOWN"; 49 } 50 } 51 52 } // namespace 53 checkError(const char * cmd,const char * file,int line)54void checkError(const char* cmd, const char* file, int line) { 55 // fprintf(stderr, "cmd: %s\n", cmd); 56 GLenum err = GL_NO_ERROR; 57 if ((err = glGetError()) != GL_NO_ERROR) { 58 std::string message = std::string(cmd) + ": Error " + stringFromError(err); 59 60 // Check for further errors 61 while ((err = glGetError()) != GL_NO_ERROR) { 62 message += ", "; 63 message += stringFromError(err); 64 } 65 66 throw Error(message + " at " + file + ":" + util::toString(line)); 67 } 68 } 69 70 } // namespace gl 71 } // namespace mbgl 72