nkeynes@653: /** nkeynes@653: * $Id$ nkeynes@653: * nkeynes@653: * GL-based support functions nkeynes@653: * nkeynes@653: * Copyright (c) 2005 Nathan Keynes. nkeynes@653: * nkeynes@653: * This program is free software; you can redistribute it and/or modify nkeynes@653: * it under the terms of the GNU General Public License as published by nkeynes@653: * the Free Software Foundation; either version 2 of the License, or nkeynes@653: * (at your option) any later version. nkeynes@653: * nkeynes@653: * This program is distributed in the hope that it will be useful, nkeynes@653: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@653: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@653: * GNU General Public License for more details. nkeynes@653: */ nkeynes@736: nkeynes@653: #include nkeynes@687: #include nkeynes@653: #include "pvr2/glutil.h" nkeynes@653: nkeynes@667: gboolean isGLSecondaryColorSupported() nkeynes@667: { nkeynes@736: return isGLExtensionSupported("GL_EXT_secondary_color"); nkeynes@667: } nkeynes@667: nkeynes@667: gboolean isGLVertexBufferSupported() nkeynes@667: { nkeynes@736: return isGLExtensionSupported("GL_ARB_vertex_buffer_object"); nkeynes@667: } nkeynes@667: nkeynes@667: gboolean isGLPixelBufferSupported() nkeynes@667: { nkeynes@736: return isGLExtensionSupported("GL_ARB_pixel_buffer_object"); nkeynes@667: } nkeynes@667: nkeynes@667: gboolean isGLMirroredTextureSupported() nkeynes@667: { nkeynes@736: return isGLExtensionSupported("GL_ARB_texture_mirrored_repeat"); nkeynes@667: } nkeynes@667: nkeynes@653: /** nkeynes@653: * Test if a specific extension is supported. From opengl.org nkeynes@653: * @param extension extension name to check for nkeynes@653: * @return TRUE if supported, otherwise FALSE. nkeynes@653: */ nkeynes@653: gboolean isGLExtensionSupported( const char *extension ) nkeynes@653: { nkeynes@653: const GLubyte *extensions = NULL; nkeynes@653: const GLubyte *start; nkeynes@653: GLubyte *where, *terminator; nkeynes@653: nkeynes@653: /* Extension names should not have spaces. */ nkeynes@653: where = (GLubyte *) strchr(extension, ' '); nkeynes@653: if (where || *extension == '\0') nkeynes@736: return 0; nkeynes@653: extensions = glGetString(GL_EXTENSIONS); nkeynes@653: if( extensions == NULL ) { nkeynes@736: /* No GL available, so we're pretty sure the extension isn't nkeynes@736: * available either. */ nkeynes@736: return FALSE; nkeynes@653: } nkeynes@653: /* It takes a bit of care to be fool-proof about parsing the nkeynes@653: OpenGL extensions string. Don't be fooled by sub-strings, nkeynes@653: etc. */ nkeynes@653: start = extensions; nkeynes@653: for (;;) { nkeynes@736: where = (GLubyte *) strstr((const char *) start, extension); nkeynes@736: if (!where) nkeynes@736: break; nkeynes@736: terminator = where + strlen(extension); nkeynes@736: if (where == start || *(where - 1) == ' ') nkeynes@736: if (*terminator == ' ' || *terminator == '\0') nkeynes@736: return TRUE; nkeynes@736: start = terminator; nkeynes@653: } nkeynes@653: return FALSE; nkeynes@653: } nkeynes@687: nkeynes@687: void glPrintInfo( FILE *out ) nkeynes@687: { nkeynes@700: const gchar *extensions = (const gchar *)glGetString(GL_EXTENSIONS); nkeynes@687: gchar **ext_split = g_strsplit(extensions, " ", 0); nkeynes@687: unsigned int i; nkeynes@736: nkeynes@687: fprintf( out, "GL Vendor: %s\n", glGetString(GL_VENDOR) ); nkeynes@687: fprintf( out, "GL Renderer: %s\n", glGetString(GL_RENDERER) ); nkeynes@687: fprintf( out, "GL Version: %s\n", glGetString(GL_VERSION) ); nkeynes@736: nkeynes@687: fprintf( out, "Supported GL Extensions:\n" ); nkeynes@687: for( i=0; ext_split[i] != NULL; i++ ) { nkeynes@687: fprintf( out, " %s\n", ext_split[i] ); nkeynes@687: } nkeynes@687: g_strfreev(ext_split); nkeynes@687: }