nkeynes@280: /** nkeynes@290: * $Id: video_gl.c,v 1.2 2007-01-15 12:57:12 nkeynes Exp $ nkeynes@280: * nkeynes@280: * Common GL code that doesn't depend on a specific implementation nkeynes@280: * nkeynes@280: * Copyright (c) 2005 Nathan Keynes. nkeynes@280: * nkeynes@280: * This program is free software; you can redistribute it and/or modify nkeynes@280: * it under the terms of the GNU General Public License as published by nkeynes@280: * the Free Software Foundation; either version 2 of the License, or nkeynes@280: * (at your option) any later version. nkeynes@280: * nkeynes@280: * This program is distributed in the hope that it will be useful, nkeynes@280: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@280: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@280: * GNU General Public License for more details. nkeynes@280: */ nkeynes@280: nkeynes@280: #include "dream.h" nkeynes@280: #include "drivers/video_gl.h" nkeynes@280: #include nkeynes@280: nkeynes@280: char *required_extensions[] = { "GL_EXT_framebuffer_object", NULL }; nkeynes@280: nkeynes@280: /** nkeynes@280: * Test if a specific extension is supported. From opengl.org nkeynes@280: * @param extension extension name to check for nkeynes@280: * @return TRUE if supported, otherwise FALSE. nkeynes@280: */ nkeynes@280: gboolean isGLExtensionSupported( const char *extension ) nkeynes@280: { nkeynes@280: const GLubyte *extensions = NULL; nkeynes@280: const GLubyte *start; nkeynes@280: GLubyte *where, *terminator; nkeynes@280: nkeynes@280: /* Extension names should not have spaces. */ nkeynes@280: where = (GLubyte *) strchr(extension, ' '); nkeynes@280: if (where || *extension == '\0') nkeynes@280: return 0; nkeynes@280: extensions = glGetString(GL_EXTENSIONS); nkeynes@280: /* It takes a bit of care to be fool-proof about parsing the nkeynes@280: OpenGL extensions string. Don't be fooled by sub-strings, nkeynes@280: etc. */ nkeynes@280: start = extensions; nkeynes@280: for (;;) { nkeynes@280: where = (GLubyte *) strstr((const char *) start, extension); nkeynes@280: if (!where) nkeynes@280: break; nkeynes@280: terminator = where + strlen(extension); nkeynes@280: if (where == start || *(where - 1) == ' ') nkeynes@280: if (*terminator == ' ' || *terminator == '\0') nkeynes@280: return TRUE; nkeynes@280: start = terminator; nkeynes@280: } nkeynes@280: return FALSE; nkeynes@280: } nkeynes@280: nkeynes@280: gboolean hasRequiredGLExtensions( ) nkeynes@280: { nkeynes@280: int i; nkeynes@280: gboolean isOK = TRUE; nkeynes@280: nkeynes@280: for( i=0; required_extensions[i] != NULL; i++ ) { nkeynes@280: if( !isGLExtensionSupported(required_extensions[i]) ) { nkeynes@280: ERROR( "Required OpenGL extension not supported: %s", required_extensions[i] ); nkeynes@280: isOK = FALSE; nkeynes@280: } nkeynes@280: } nkeynes@280: return isOK; nkeynes@280: }