1 | /* $Id: glut_ext.c,v 1.2 2000-02-09 08:46:11 jeroen Exp $ */
|
---|
2 | /* Copyright (c) Mark J. Kilgard, 1994, 1997. */
|
---|
3 |
|
---|
4 | /* This program is freely distributable without licensing fees
|
---|
5 | and is provided without guarantee or warrantee expressed or
|
---|
6 | implied. This program is -not- in the public domain. */
|
---|
7 |
|
---|
8 | #include <stdlib.h>
|
---|
9 | #include <string.h>
|
---|
10 |
|
---|
11 | #include "glutint.h"
|
---|
12 |
|
---|
13 | /* CENTRY */
|
---|
14 | int APIENTRY
|
---|
15 | glutExtensionSupported(const char *extension)
|
---|
16 | {
|
---|
17 | static const GLubyte *extensions = NULL;
|
---|
18 | const GLubyte *start;
|
---|
19 | GLubyte *where, *terminator;
|
---|
20 |
|
---|
21 | /* Extension names should not have spaces. */
|
---|
22 | where = (GLubyte *) strchr(extension, ' ');
|
---|
23 | if (where || *extension == '\0')
|
---|
24 | return 0;
|
---|
25 |
|
---|
26 | if (!extensions) {
|
---|
27 | extensions = glGetString(GL_EXTENSIONS);
|
---|
28 | }
|
---|
29 | /* It takes a bit of care to be fool-proof about parsing the
|
---|
30 | OpenGL extensions string. Don't be fooled by sub-strings,
|
---|
31 | etc. */
|
---|
32 | start = extensions;
|
---|
33 | for (;;) {
|
---|
34 | /* If your application crashes in the strstr routine below,
|
---|
35 | you are probably calling glutExtensionSupported without
|
---|
36 | having a current window. Calling glGetString without
|
---|
37 | a current OpenGL context has unpredictable results.
|
---|
38 | Please fix your program. */
|
---|
39 | where = (GLubyte *) strstr((const char *) start, extension);
|
---|
40 | if (!where)
|
---|
41 | break;
|
---|
42 | terminator = where + strlen(extension);
|
---|
43 | if (where == start || *(where - 1) == ' ') {
|
---|
44 | if (*terminator == ' ' || *terminator == '\0') {
|
---|
45 | return 1;
|
---|
46 | }
|
---|
47 | }
|
---|
48 | start = terminator;
|
---|
49 | }
|
---|
50 | return 0;
|
---|
51 | }
|
---|
52 |
|
---|
53 | /* ENDCENTRY */
|
---|