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