/* Copyright (c) Mark J. Kilgard, 1994. */ /* This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. */ #include #include #include #include "glutint.h" /* CENTRY */ int APIENTRY glutExtensionSupported(const char *extension) { static const GLubyte *extensions = NULL; const GLubyte *start; GLubyte *where, *terminator; /* Extension names should not have spaces. */ where = (GLubyte *) strchr(extension, ' '); if (where || *extension == '\0') return 0; if (!extensions) extensions = glGetString(GL_EXTENSIONS); /* It takes a bit of care to be fool-proof about parsing the OpenGL extensions string. Don't be fooled by sub-strings, etc. */ start = extensions; for (;;) { where = (GLubyte *) strstr((const char *) start, extension); if (!where) break; terminator = where + strlen(extension); if (where == start || *(where - 1) == ' ') { if (*terminator == ' ' || *terminator == '\0') { return 1; } } start = terminator; } return 0; } /* ENDCENTRY */ int __glutIsSupportedByGLX(char *extension) { #if defined(GLX_VERSION_1_1) static const char *extensions = NULL; const char *start; char *where, *terminator; int major, minor; glXQueryVersion(__glutDisplay, &major, &minor); /* Be careful not to call glXQueryExtensionsString if it looks like the server doesn't support GLX 1.1. Unfortunately, the original GLX 1.0 didn't have the notion of GLX extensions. */ if ((major == 1 && minor >= 1) || (major > 1)) { if (!extensions) extensions = glXQueryExtensionsString(__glutDisplay, __glutScreen); /* It takes a bit of care to be fool-proof about parsing the GLX extensions string. Don't be fooled by sub-strings, etc. */ start = extensions; for (;;) { where = strstr(start, extension); if (!where) return 0; terminator = where + strlen(extension); if (where == start || *(where - 1) == ' ') { if (*terminator == ' ' || *terminator == '\0') { return 1; } } start = terminator; } } #else /* No GLX extensions before GLX 1.1 */ #endif return 0; }