⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glut_glxext.c

📁 mesa-6.5-minigui源码
💻 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 + -