#include #include #define __USE_GNU #include static const GLubyte* (*real_glGetString)( GLenum name ); static char* bad_extensions[] = { "GL_ARB_vertex_program", NULL }; GLAPI const GLubyte* GLAPIENTRY glGetString( GLenum name ) { if (!real_glGetString) { real_glGetString = dlsym(RTLD_NEXT, "glGetString"); if ( real_glGetString == NULL ) { return NULL; } } const GLubyte* glstr = real_glGetString(name); if ( name == GL_EXTENSIONS ) { static char* extensions = NULL; char *ext; if (extensions) { return extensions; } extensions = malloc(8192); memset(extensions, 0, 8192); ext = strtok((char *)glstr, " "); while (ext != NULL) { int i, is_bad; i = 0; is_bad = 0; while ( bad_extensions[i] ) { if (strcmp(bad_extensions[i], ext) == 0) { is_bad = 1; break; } i++; } if ( ! is_bad ) { strcat(extensions, ext); strcat(extensions, " "); } ext = strtok(NULL, " "); } glstr = extensions; } return glstr; }