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 if(GLEW_EXT_texture_filter_anisotropic) {
19 glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glcaps.max_aniso);
21 if(GLEW_ARB_tessellation_shader) {
22 glGetIntegerv(GL_MAX_TESS_GEN_LEVEL, &glcaps.max_tess_level);
25 glcaps.debug = GLEW_ARB_debug_output;
29 printf("Installing OpenGL debug callback\n");
30 glDebugMessageCallbackARB(gldebug_logger, 0);
48 void dump_gl_texture(unsigned int tex, const char *fname)
52 unsigned char *pixels, *pptr;
54 glBindTexture(GL_TEXTURE_2D, tex);
55 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
56 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
58 if(!(pixels = malloc(width * height * 4))) {
62 glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
64 if(!(fp = fopen(fname, "wb"))) {
68 fprintf(fp, "P6\n%d %d\n255\n", width, height);
69 for(i=0; i<width * height; i++) {
80 static void GLAPIENTRY gldebug_logger(GLenum src, GLenum type, GLuint id, GLenum severity,
81 GLsizei len, const char *msg, const void *cls)
83 static const char *fmt = "[GLDEBUG] (%s) %s: %s\n";
85 case GL_DEBUG_TYPE_ERROR:
86 fprintf(stderr, fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
89 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
90 case GL_DEBUG_TYPE_PORTABILITY:
91 case GL_DEBUG_TYPE_PERFORMANCE:
92 printf(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
96 printf(fmt, gldebug_srcstr(src), gldebug_typestr(type), msg);
100 static const char *gldebug_srcstr(unsigned int src)
103 case GL_DEBUG_SOURCE_API:
105 case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
107 case GL_DEBUG_SOURCE_SHADER_COMPILER:
109 case GL_DEBUG_SOURCE_THIRD_PARTY:
111 case GL_DEBUG_SOURCE_APPLICATION:
113 case GL_DEBUG_SOURCE_OTHER:
121 static const char *gldebug_typestr(unsigned int type)
124 case GL_DEBUG_TYPE_ERROR:
126 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
128 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
129 return "undefined behavior";
130 case GL_DEBUG_TYPE_PORTABILITY:
131 return "portability warning";
132 case GL_DEBUG_TYPE_PERFORMANCE:
133 return "performance warning";
134 case GL_DEBUG_TYPE_OTHER:
143 static const char *gldebug_sevstr(unsigned int sev)
146 case GL_DEBUG_SEVERITY_HIGH:
148 case GL_DEBUG_SEVERITY_MEDIUM:
150 case GL_DEBUG_SEVERITY_LOW: