rewrite of glutExtensionSupported - works correctly now
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@122 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
6fadddb78a
commit
66dc199794
@ -50,9 +50,9 @@
|
|||||||
*/
|
*/
|
||||||
int FGAPIENTRY glutExtensionSupported( const char* extension )
|
int FGAPIENTRY glutExtensionSupported( const char* extension )
|
||||||
{
|
{
|
||||||
const char *extensions;
|
const char *extensions, *start;
|
||||||
const char *ptr;
|
const char *ptr;
|
||||||
int len = strlen ( extension ) ;
|
const int len = strlen( extension ) ;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure there is a current window, and thus -- a current context available
|
* Make sure there is a current window, and thus -- a current context available
|
||||||
@ -60,42 +60,31 @@ int FGAPIENTRY glutExtensionSupported( const char* extension )
|
|||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 );
|
freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the extension itself looks valid (contains no spaces)
|
||||||
|
*/
|
||||||
|
if (strchr(extension, ' '))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note it is safe to query the extensions
|
* Note it is safe to query the extensions
|
||||||
*/
|
*/
|
||||||
extensions = glGetString(GL_EXTENSIONS);
|
start = extensions = (const char *) glGetString(GL_EXTENSIONS);
|
||||||
|
|
||||||
|
/* XXX consider printing a warning to stderr that there's no current
|
||||||
|
* rendering context.
|
||||||
|
*/
|
||||||
freeglut_return_val_if_fail( extensions != NULL, 0 );
|
freeglut_return_val_if_fail( extensions != NULL, 0 );
|
||||||
|
|
||||||
/*
|
while (1) {
|
||||||
* Check if the extension itself looks valid
|
const char *p = strstr(extensions, extension);
|
||||||
*/
|
if (!p)
|
||||||
if ( strchr ( extension, ' ' ) != NULL )
|
return 0; /* not found */
|
||||||
return( 0 );
|
/* check that the match isn't a super string */
|
||||||
|
if ((p == start || p[-1] == ' ') && (p[len] == ' ' || p[len] == 0))
|
||||||
/*
|
return 1;
|
||||||
* Look for our extension
|
/* skip the false match and continue */
|
||||||
*/
|
extensions = p + len;
|
||||||
for (ptr = extensions; *ptr;)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Is it the current extension?
|
|
||||||
*/
|
|
||||||
if ( strncmp ( extension, extensions, len ) == 0 )
|
|
||||||
return 1 ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* No, go find the next extension. They are separated from each other by one or more blank spaces.
|
|
||||||
*/
|
|
||||||
ptr = strchr ( ptr, ' ' ) ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If we ran off the end of the "extensions" character string, we didn't find it. Return failure.
|
|
||||||
*/
|
|
||||||
if ( !ptr ) return 0 ;
|
|
||||||
|
|
||||||
while ( *ptr == ' ' )
|
|
||||||
ptr++ ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0 ;
|
return 0 ;
|
||||||
|
Reference in New Issue
Block a user