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);
18 glcaps.debug = GLEW_ARB_debug_output;
22 printf("Installing OpenGL debug callback\n");
23 glDebugMessageCallbackARB(gldebug_logger, 0);
41 void dump_gl_texture(unsigned int tex, const char *fname)
45 unsigned char *pixels, *pptr;
47 glBindTexture(GL_TEXTURE_2D, tex);
48 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
49 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
51 if(!(pixels = malloc(width * height * 4))) {
55 glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
57 if(!(fp = fopen(fname, "wb"))) {
61 fprintf(fp, "P6\n%d %d\n255\n", width, height);
62 for(i=0; i<width * height; i++) {
73 static void GLAPIENTRY gldebug_logger(GLenum src, GLenum type, GLuint id, GLenum severity,
74 GLsizei len, const char *msg, const void *cls)
76 static const char *fmt = "[GLDEBUG] (%s) %s: %s\n";
78 case GL_DEBUG_TYPE_ERROR:
79 fprintf(stderr, fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
82 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
83 case GL_DEBUG_TYPE_PORTABILITY:
84 case GL_DEBUG_TYPE_PERFORMANCE:
85 printf(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
89 printf(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
93 static const char *gldebug_srcstr(unsigned int src)
96 case GL_DEBUG_SOURCE_API:
98 case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
100 case GL_DEBUG_SOURCE_SHADER_COMPILER:
102 case GL_DEBUG_SOURCE_THIRD_PARTY:
104 case GL_DEBUG_SOURCE_APPLICATION:
106 case GL_DEBUG_SOURCE_OTHER:
114 static const char *gldebug_typestr(unsigned int type)
117 case GL_DEBUG_TYPE_ERROR:
119 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
121 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
122 return "undefined behavior";
123 case GL_DEBUG_TYPE_PORTABILITY:
124 return "portability warning";
125 case GL_DEBUG_TYPE_PERFORMANCE:
126 return "performance warning";
127 case GL_DEBUG_TYPE_OTHER:
136 static const char *gldebug_sevstr(unsigned int sev)
139 case GL_DEBUG_SEVERITY_HIGH:
141 case GL_DEBUG_SEVERITY_MEDIUM:
143 case GL_DEBUG_SEVERITY_LOW: