nkeynes@635: /** nkeynes@636: * $Id$ nkeynes@635: * nkeynes@635: * GL-based support functions nkeynes@635: * nkeynes@635: * Copyright (c) 2005 Nathan Keynes. nkeynes@635: * nkeynes@635: * This program is free software; you can redistribute it and/or modify nkeynes@635: * it under the terms of the GNU General Public License as published by nkeynes@635: * the Free Software Foundation; either version 2 of the License, or nkeynes@635: * (at your option) any later version. nkeynes@635: * nkeynes@635: * This program is distributed in the hope that it will be useful, nkeynes@635: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@635: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@635: * GNU General Public License for more details. nkeynes@635: */ nkeynes@645: #include nkeynes@635: #include "pvr2/glutil.h" nkeynes@635: nkeynes@635: /** nkeynes@635: * Test if a specific extension is supported. From opengl.org nkeynes@635: * @param extension extension name to check for nkeynes@635: * @return TRUE if supported, otherwise FALSE. nkeynes@635: */ nkeynes@635: gboolean isGLExtensionSupported( const char *extension ) nkeynes@635: { nkeynes@635: const GLubyte *extensions = NULL; nkeynes@635: const GLubyte *start; nkeynes@635: GLubyte *where, *terminator; nkeynes@635: nkeynes@635: /* Extension names should not have spaces. */ nkeynes@635: where = (GLubyte *) strchr(extension, ' '); nkeynes@635: if (where || *extension == '\0') nkeynes@635: return 0; nkeynes@635: extensions = glGetString(GL_EXTENSIONS); nkeynes@645: if( extensions == NULL ) { nkeynes@645: /* No GL available, so we're pretty sure the extension isn't nkeynes@645: * available either. */ nkeynes@645: return FALSE; nkeynes@645: } nkeynes@635: /* It takes a bit of care to be fool-proof about parsing the nkeynes@635: OpenGL extensions string. Don't be fooled by sub-strings, nkeynes@635: etc. */ nkeynes@635: start = extensions; nkeynes@635: for (;;) { nkeynes@635: where = (GLubyte *) strstr((const char *) start, extension); nkeynes@635: if (!where) nkeynes@635: break; nkeynes@635: terminator = where + strlen(extension); nkeynes@635: if (where == start || *(where - 1) == ' ') nkeynes@635: if (*terminator == ' ' || *terminator == '\0') nkeynes@635: return TRUE; nkeynes@635: start = terminator; nkeynes@635: } nkeynes@635: return FALSE; nkeynes@635: }