6 static void GLAPIENTRY gldebug_logger(GLenum src, GLenum type, GLuint id, GLenum severity,
7 GLsizei len, const char *msg, const void *cls);
9 static const char *gldebug_srcstr(unsigned int src);
10 static const char *gldebug_typestr(unsigned int type);
11 static const char *gldebug_sevstr(unsigned int sev);
19 glcaps.debug = GLEW_ARB_debug_output;
20 glcaps.draw_range = GLEW_EXT_draw_range_elements;
24 info_log("Installing OpenGL debug callback\n");
25 glDebugMessageCallbackARB(gldebug_logger, 0);
32 void dump_gl_texture(unsigned int tex, const char *fname)
36 unsigned char *pixels;
38 glBindTexture(GL_TEXTURE_2D, tex);
39 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
40 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
42 if(!(pixels = malloc(width * height * 3))) {
45 glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
47 if(!(fp = fopen(fname, "wb"))) {
51 fprintf(fp, "P6\n%d %d\n255\n", width, height);
52 for(i=0; i<width * height * 3; i++) {
60 static void GLAPIENTRY gldebug_logger(GLenum src, GLenum type, GLuint id, GLenum severity,
61 GLsizei len, const char *msg, const void *cls)
63 static const char *fmt = "[GLDEBUG] (%s) %s: %s\n";
65 case GL_DEBUG_TYPE_ERROR:
66 error_log(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
69 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
70 case GL_DEBUG_TYPE_PORTABILITY:
71 case GL_DEBUG_TYPE_PERFORMANCE:
72 warning_log(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
76 debug_log(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
80 static const char *gldebug_srcstr(unsigned int src)
83 case GL_DEBUG_SOURCE_API:
85 case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
87 case GL_DEBUG_SOURCE_SHADER_COMPILER:
89 case GL_DEBUG_SOURCE_THIRD_PARTY:
91 case GL_DEBUG_SOURCE_APPLICATION:
93 case GL_DEBUG_SOURCE_OTHER:
101 static const char *gldebug_typestr(unsigned int type)
104 case GL_DEBUG_TYPE_ERROR:
106 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
108 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
109 return "undefined behavior";
110 case GL_DEBUG_TYPE_PORTABILITY:
111 return "portability warning";
112 case GL_DEBUG_TYPE_PERFORMANCE:
113 return "performance warning";
114 case GL_DEBUG_TYPE_OTHER:
122 static const char *gldebug_sevstr(unsigned int sev)
125 case GL_DEBUG_SEVERITY_HIGH:
127 case GL_DEBUG_SEVERITY_MEDIUM:
129 case GL_DEBUG_SEVERITY_LOW: