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)10 MBGL_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)54 void 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