nkeynes@635 | 1 | /**
|
nkeynes@636 | 2 | * $Id$
|
nkeynes@635 | 3 | *
|
nkeynes@635 | 4 | * GL-based support functions
|
nkeynes@635 | 5 | *
|
nkeynes@635 | 6 | * Copyright (c) 2005 Nathan Keynes.
|
nkeynes@635 | 7 | *
|
nkeynes@635 | 8 | * This program is free software; you can redistribute it and/or modify
|
nkeynes@635 | 9 | * it under the terms of the GNU General Public License as published by
|
nkeynes@635 | 10 | * the Free Software Foundation; either version 2 of the License, or
|
nkeynes@635 | 11 | * (at your option) any later version.
|
nkeynes@635 | 12 | *
|
nkeynes@635 | 13 | * This program is distributed in the hope that it will be useful,
|
nkeynes@635 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
nkeynes@635 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
nkeynes@635 | 16 | * GNU General Public License for more details.
|
nkeynes@635 | 17 | */
|
nkeynes@736 | 18 |
|
nkeynes@645 | 19 | #include <string.h>
|
nkeynes@687 | 20 | #include <glib/gstrfuncs.h>
|
nkeynes@635 | 21 | #include "pvr2/glutil.h"
|
nkeynes@635 | 22 |
|
nkeynes@667 | 23 | gboolean isGLSecondaryColorSupported()
|
nkeynes@667 | 24 | {
|
nkeynes@736 | 25 | return isGLExtensionSupported("GL_EXT_secondary_color");
|
nkeynes@667 | 26 | }
|
nkeynes@667 | 27 |
|
nkeynes@667 | 28 | gboolean isGLVertexBufferSupported()
|
nkeynes@667 | 29 | {
|
nkeynes@736 | 30 | return isGLExtensionSupported("GL_ARB_vertex_buffer_object");
|
nkeynes@667 | 31 | }
|
nkeynes@667 | 32 |
|
nkeynes@667 | 33 | gboolean isGLPixelBufferSupported()
|
nkeynes@667 | 34 | {
|
nkeynes@736 | 35 | return isGLExtensionSupported("GL_ARB_pixel_buffer_object");
|
nkeynes@667 | 36 | }
|
nkeynes@667 | 37 |
|
nkeynes@667 | 38 | gboolean isGLMirroredTextureSupported()
|
nkeynes@667 | 39 | {
|
nkeynes@736 | 40 | return isGLExtensionSupported("GL_ARB_texture_mirrored_repeat");
|
nkeynes@667 | 41 | }
|
nkeynes@667 | 42 |
|
nkeynes@635 | 43 | /**
|
nkeynes@635 | 44 | * Test if a specific extension is supported. From opengl.org
|
nkeynes@635 | 45 | * @param extension extension name to check for
|
nkeynes@635 | 46 | * @return TRUE if supported, otherwise FALSE.
|
nkeynes@635 | 47 | */
|
nkeynes@635 | 48 | gboolean isGLExtensionSupported( const char *extension )
|
nkeynes@635 | 49 | {
|
nkeynes@635 | 50 | const GLubyte *extensions = NULL;
|
nkeynes@635 | 51 | const GLubyte *start;
|
nkeynes@635 | 52 | GLubyte *where, *terminator;
|
nkeynes@635 | 53 |
|
nkeynes@635 | 54 | /* Extension names should not have spaces. */
|
nkeynes@635 | 55 | where = (GLubyte *) strchr(extension, ' ');
|
nkeynes@635 | 56 | if (where || *extension == '\0')
|
nkeynes@736 | 57 | return 0;
|
nkeynes@635 | 58 | extensions = glGetString(GL_EXTENSIONS);
|
nkeynes@645 | 59 | if( extensions == NULL ) {
|
nkeynes@736 | 60 | /* No GL available, so we're pretty sure the extension isn't
|
nkeynes@736 | 61 | * available either. */
|
nkeynes@736 | 62 | return FALSE;
|
nkeynes@645 | 63 | }
|
nkeynes@635 | 64 | /* It takes a bit of care to be fool-proof about parsing the
|
nkeynes@635 | 65 | OpenGL extensions string. Don't be fooled by sub-strings,
|
nkeynes@635 | 66 | etc. */
|
nkeynes@635 | 67 | start = extensions;
|
nkeynes@635 | 68 | for (;;) {
|
nkeynes@736 | 69 | where = (GLubyte *) strstr((const char *) start, extension);
|
nkeynes@736 | 70 | if (!where)
|
nkeynes@736 | 71 | break;
|
nkeynes@736 | 72 | terminator = where + strlen(extension);
|
nkeynes@736 | 73 | if (where == start || *(where - 1) == ' ')
|
nkeynes@736 | 74 | if (*terminator == ' ' || *terminator == '\0')
|
nkeynes@736 | 75 | return TRUE;
|
nkeynes@736 | 76 | start = terminator;
|
nkeynes@635 | 77 | }
|
nkeynes@635 | 78 | return FALSE;
|
nkeynes@635 | 79 | }
|
nkeynes@687 | 80 |
|
nkeynes@687 | 81 | void glPrintInfo( FILE *out )
|
nkeynes@687 | 82 | {
|
nkeynes@700 | 83 | const gchar *extensions = (const gchar *)glGetString(GL_EXTENSIONS);
|
nkeynes@687 | 84 | gchar **ext_split = g_strsplit(extensions, " ", 0);
|
nkeynes@687 | 85 | unsigned int i;
|
nkeynes@736 | 86 |
|
nkeynes@687 | 87 | fprintf( out, "GL Vendor: %s\n", glGetString(GL_VENDOR) );
|
nkeynes@687 | 88 | fprintf( out, "GL Renderer: %s\n", glGetString(GL_RENDERER) );
|
nkeynes@687 | 89 | fprintf( out, "GL Version: %s\n", glGetString(GL_VERSION) );
|
nkeynes@736 | 90 |
|
nkeynes@687 | 91 | fprintf( out, "Supported GL Extensions:\n" );
|
nkeynes@687 | 92 | for( i=0; ext_split[i] != NULL; i++ ) {
|
nkeynes@687 | 93 | fprintf( out, " %s\n", ext_split[i] );
|
nkeynes@687 | 94 | }
|
nkeynes@687 | 95 | g_strfreev(ext_split);
|
nkeynes@687 | 96 | }
|