aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/Mesa_6.4.1/src/glut/glx/glut_glxext.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/extras/Mesa_6.4.1/src/glut/glx/glut_glxext.c')
-rw-r--r--nx-X11/extras/Mesa_6.4.1/src/glut/glx/glut_glxext.c255
1 files changed, 255 insertions, 0 deletions
diff --git a/nx-X11/extras/Mesa_6.4.1/src/glut/glx/glut_glxext.c b/nx-X11/extras/Mesa_6.4.1/src/glut/glx/glut_glxext.c
new file mode 100644
index 000000000..71b67e075
--- /dev/null
+++ b/nx-X11/extras/Mesa_6.4.1/src/glut/glx/glut_glxext.c
@@ -0,0 +1,255 @@
+
+/* Copyright (c) Mark J. Kilgard, 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"
+
+#if defined(GLX_VERSION_1_1)
+int
+__glutIsSupportedByGLX(char *extension)
+{
+ static const char *extensions = NULL;
+ const char *start;
+ char *where, *terminator;
+ int major, minor;
+
+ glXQueryVersion(__glutDisplay, &major, &minor);
+ /* Be careful not to call glXQueryExtensionsString if it
+ looks like the server doesn't support GLX 1.1.
+ Unfortunately, the original GLX 1.0 didn't have the notion
+ of GLX extensions. */
+ if ((major == 1 && minor >= 1) || (major > 1)) {
+ if (!extensions)
+ extensions = glXQueryExtensionsString(__glutDisplay, __glutScreen);
+ /* It takes a bit of care to be fool-proof about parsing
+ the GLX extensions string. Don't be fooled by
+ sub-strings, etc. */
+ start = extensions;
+ for (;;) {
+ where = strstr(start, extension);
+ if (!where)
+ return 0;
+ terminator = where + strlen(extension);
+ if (where == start || *(where - 1) == ' ') {
+ if (*terminator == ' ' || *terminator == '\0') {
+ return 1;
+ }
+ }
+ start = terminator;
+ }
+ }
+ return 0;
+}
+#endif
+
+
+
+/*
+ * Wrapping of GLX extension functions.
+ * Technically, we should do a runtime test to see if we've got the
+ * glXGetProcAddressARB() function. I think GLX_ARB_get_proc_address
+ * is pretty widely supported now and any system that has
+ * GLX_ARB_get_proc_address defined in its header files should be OK
+ * at runtime.
+ */
+
+int
+__glut_glXBindChannelToWindowSGIX(Display *dpy, int screen,
+ int channel, Window window)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef int (*glXBindChannelToWindowSGIX_t) (Display *, int, int, Window);
+ static glXBindChannelToWindowSGIX_t glXBindChannelToWindowSGIX_ptr = NULL;
+ if (!glXBindChannelToWindowSGIX_ptr) {
+ glXBindChannelToWindowSGIX_ptr = (glXBindChannelToWindowSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXBindChannelToWindowSGIX");
+ }
+ if (glXBindChannelToWindowSGIX_ptr)
+ return (*glXBindChannelToWindowSGIX_ptr)(dpy, screen, channel, window);
+ else
+ return 0;
+#elif defined(GLX_SGIX_video_resize)
+ return glXBindChannelToWindowSGIX(dpy, screen, channel, window);
+#else
+ return 0;
+#endif
+}
+
+
+int
+__glut_glXChannelRectSGIX(Display *dpy, int screen, int channel,
+ int x, int y, int w, int h)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef int (*glXChannelRectSGIX_t)(Display *, int, int, int, int, int, int);
+ static glXChannelRectSGIX_t glXChannelRectSGIX_ptr = NULL;
+ if (!glXChannelRectSGIX_ptr) {
+ glXChannelRectSGIX_ptr = (glXChannelRectSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXChannelRectSGIX");
+ }
+ if (glXChannelRectSGIX_ptr)
+ return (*glXChannelRectSGIX_ptr)(dpy, screen, channel, x, y, w, h);
+ else
+ return 0;
+#elif defined(GLX_SGIX_video_resize)
+ return glXChannelRectSGIX(dpy, screen, channel, x, y, w, h);
+#else
+ return 0;
+#endif
+}
+
+
+int
+__glut_glXQueryChannelRectSGIX(Display *dpy, int screen, int channel,
+ int *x, int *y, int *w, int *h)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef int (*glXQueryChannelRectSGIX_t)(Display *, int, int,
+ int *, int *, int *, int *);
+ static glXQueryChannelRectSGIX_t glXQueryChannelRectSGIX_ptr = NULL;
+ if (!glXQueryChannelRectSGIX_ptr) {
+ glXQueryChannelRectSGIX_ptr = (glXQueryChannelRectSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXQueryChannelRectSGIX");
+ }
+ if (glXQueryChannelRectSGIX_ptr)
+ return (*glXQueryChannelRectSGIX_ptr)(dpy, screen, channel, x, y, w, h);
+ else
+ return 0;
+#elif defined(GLX_SGIX_video_resize)
+ return glXQueryChannelRectSGIX(dpy, screen, channel, x, y, w, h);
+#else
+ return 0;
+#endif
+}
+
+
+int
+__glut_glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel,
+ int *dx, int *dy, int *dw, int *dh)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef int (*glXQueryChannelDeltasSGIX_t)(Display *, int, int,
+ int *, int *, int *, int *);
+ static glXQueryChannelDeltasSGIX_t glXQueryChannelDeltasSGIX_ptr = NULL;
+ if (!glXQueryChannelDeltasSGIX_ptr) {
+ glXQueryChannelDeltasSGIX_ptr = (glXQueryChannelDeltasSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXQueryChannelDeltasSGIX");
+ }
+ if (glXQueryChannelDeltasSGIX_ptr)
+ return (*glXQueryChannelDeltasSGIX_ptr)(dpy, screen, channel,
+ dx, dy, dw, dh);
+ else
+ return 0;
+#elif defined(GLX_SGIX_video_resize)
+ return glXQueryChannelDeltasSGIX(dpy, screen, channel, dx, dy, dw, dh);
+#else
+ return 0;
+#endif
+}
+
+
+int
+__glut_glXChannelRectSyncSGIX(Display *dpy, int screen,
+ int channel, GLenum synctype)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef int (*glXChannelRectSyncSGIX_t)(Display *, int, int, GLenum);
+ static glXChannelRectSyncSGIX_t glXChannelRectSyncSGIX_ptr = NULL;
+ if (!glXChannelRectSyncSGIX_ptr) {
+ glXChannelRectSyncSGIX_ptr = (glXChannelRectSyncSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXChannelRectSyncSGIX");
+ }
+ if (glXChannelRectSyncSGIX_ptr)
+ return (*glXChannelRectSyncSGIX_ptr)(dpy, screen, channel, synctype);
+ else
+ return 0;
+#elif defined(GLX_SGIX_video_resize)
+ return glXChannelRectSyncSGIX(dpy, screen, channel, synctype);
+#else
+ return 0;
+#endif
+}
+
+
+
+GLXContext
+__glut_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config,
+ int render_type, GLXContext share_list,
+ Bool direct)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef GLXContext (*glXCreateContextWithConfigSGIX_t)(Display *,
+ GLXFBConfigSGIX, int, GLXContext, Bool);
+ static glXCreateContextWithConfigSGIX_t glXCreateContextWithConfig_ptr = NULL;
+ if (!glXCreateContextWithConfig_ptr) {
+ glXCreateContextWithConfig_ptr = (glXCreateContextWithConfigSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXCreateContextWithConfigSGIX");
+ }
+ if (glXCreateContextWithConfig_ptr)
+ return (*glXCreateContextWithConfig_ptr)(dpy, config, render_type,
+ share_list, direct);
+ else
+ return 0;
+#elif defined(GLX_SGIX_fbconfig)
+ return glXCreateContextWithConfigSGIX(dpy, config, render_type,
+ share_list, direct);
+#else
+ return 0;
+#endif
+}
+
+
+int
+__glut_glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config,
+ int attribute, int *value)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef int (*glXGetFBConfigAttribSGIX_t)(Display *,
+ GLXFBConfigSGIX, int, int *);
+ static glXGetFBConfigAttribSGIX_t glXGetFBConfigAttrib_ptr = NULL;
+ if (!glXGetFBConfigAttrib_ptr) {
+ glXGetFBConfigAttrib_ptr = (glXGetFBConfigAttribSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXGetFBConfigAttribSGIX");
+ }
+ if (glXGetFBConfigAttrib_ptr)
+ return (*glXGetFBConfigAttrib_ptr)(dpy, config, attribute, value);
+ else
+ return 0;
+#elif defined(GLX_SGIX_fbconfig)
+ return glXGetFBConfigAttribSGIX(dpy, config, attribute, value);
+#else
+ return 0;
+#endif
+}
+
+
+GLXFBConfigSGIX
+__glut_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
+{
+#ifdef GLX_ARB_get_proc_address
+ typedef GLXFBConfigSGIX (*glXGetFBConfigFromVisualSGIX_t)(Display *,
+ XVisualInfo *);
+ static glXGetFBConfigFromVisualSGIX_t glXGetFBConfigFromVisual_ptr = NULL;
+ if (!glXGetFBConfigFromVisual_ptr) {
+ glXGetFBConfigFromVisual_ptr = (glXGetFBConfigFromVisualSGIX_t)
+ glXGetProcAddressARB((const GLubyte *) "glXGetFBConfigFromVisualSGIX");
+ }
+ if (glXGetFBConfigFromVisual_ptr)
+ return (*glXGetFBConfigFromVisual_ptr)(dpy, vis);
+ else
+ return 0;
+#elif defined(GLX_SGIX_fbconfig)
+ return glXGetFBConfigFromVisualSGIX(dpy, vis);
+#else
+ return 0;
+#endif
+}
+
+
+
+