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;
23 info_log("Installing OpenGL debug callback\n");
24 glDebugMessageCallback(gldebug_logger, 0);
31 void dump_gl_texture(unsigned int tex, const char *fname)
35 unsigned char *pixels;
37 glBindTexture(GL_TEXTURE_2D, tex);
38 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
39 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
41 if(!(pixels = malloc(width * height * 3))) {
44 glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
46 if(!(fp = fopen(fname, "wb"))) {
50 fprintf(fp, "P6\n%d %d\n255\n", width, height);
51 for(i=0; i<width * height * 3; i++) {
59 static void GLAPIENTRY gldebug_logger(GLenum src, GLenum type, GLuint id, GLenum severity,
60 GLsizei len, const char *msg, const void *cls)
62 static const char *fmt = "[GLDEBUG] (%s) %s: %s\n";
64 case GL_DEBUG_TYPE_ERROR:
65 error_log(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
68 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
69 case GL_DEBUG_TYPE_PORTABILITY:
70 case GL_DEBUG_TYPE_PERFORMANCE:
71 warning_log(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
75 debug_log(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
79 static const char *gldebug_srcstr(unsigned int src)
82 case GL_DEBUG_SOURCE_API:
84 case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
86 case GL_DEBUG_SOURCE_SHADER_COMPILER:
88 case GL_DEBUG_SOURCE_THIRD_PARTY:
90 case GL_DEBUG_SOURCE_APPLICATION:
92 case GL_DEBUG_SOURCE_OTHER:
100 static const char *gldebug_typestr(unsigned int type)
103 case GL_DEBUG_TYPE_ERROR:
105 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
107 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
108 return "undefined behavior";
109 case GL_DEBUG_TYPE_PORTABILITY:
110 return "portability warning";
111 case GL_DEBUG_TYPE_PERFORMANCE:
112 return "performance warning";
113 case GL_DEBUG_TYPE_OTHER:
121 static const char *gldebug_sevstr(unsigned int sev)
124 case GL_DEBUG_SEVERITY_HIGH:
126 case GL_DEBUG_SEVERITY_MEDIUM:
128 case GL_DEBUG_SEVERITY_LOW: