📄 glut_glxext.c
字号:
/* 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}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -