summaryrefslogtreecommitdiffstats
path: root/src/glut/glx/glut_ext.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glut/glx/glut_ext.c')
-rw-r--r--src/glut/glx/glut_ext.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/glut/glx/glut_ext.c b/src/glut/glx/glut_ext.c
new file mode 100644
index 00000000000..abcb17a911b
--- /dev/null
+++ b/src/glut/glx/glut_ext.c
@@ -0,0 +1,53 @@
+
+/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
+
+/* This program is freely distributable without licensing fees
+ and is provided without guarantee or warrantee expressed or
+ implied. This program is -not- in the public domain. */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "glutint.h"
+
+/* CENTRY */
+int APIENTRY
+glutExtensionSupported(const char *extension)
+{
+ static const GLubyte *extensions = NULL;
+ const GLubyte *start;
+ GLubyte *where, *terminator;
+
+ /* Extension names should not have spaces. */
+ where = (GLubyte *) strchr(extension, ' ');
+ if (where || *extension == '\0')
+ return 0;
+
+ if (!extensions) {
+ extensions = glGetString(GL_EXTENSIONS);
+ }
+ /* It takes a bit of care to be fool-proof about parsing the
+ OpenGL extensions string. Don't be fooled by sub-strings,
+ etc. */
+ start = extensions;
+ for (;;) {
+ /* If your application crashes in the strstr routine below,
+ you are probably calling glutExtensionSupported without
+ having a current window. Calling glGetString without
+ a current OpenGL context has unpredictable results.
+ Please fix your program. */
+ where = (GLubyte *) strstr((const char *) start, extension);
+ if (!where)
+ break;
+ terminator = where + strlen(extension);
+ if (where == start || *(where - 1) == ' ') {
+ if (*terminator == ' ' || *terminator == '\0') {
+ return 1;
+ }
+ }
+ start = terminator;
+ }
+ return 0;
+}
+
+/* ENDCENTRY */