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

📄 fakeglx.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 5 页
字号:
      /*       * GLX_EXT_visual_info extension       */      case GLX_VISUAL_CAVEAT_EXT:         /* test for zero, just in case */         if (xmvis->mesa_visual.visualRating > 0)            *value = xmvis->mesa_visual.visualRating;         else            *value = GLX_NONE_EXT;         return 0;      /*       * GLX_ARB_multisample       */      case GLX_SAMPLE_BUFFERS_ARB:         *value = 0;         return 0;      case GLX_SAMPLES_ARB:         *value = 0;         return 0;      /*       * For FBConfigs:       */      case GLX_SCREEN_EXT:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = xmvis->visinfo->screen;         break;      case GLX_DRAWABLE_TYPE: /*SGIX too */         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT;         break;      case GLX_RENDER_TYPE_SGIX:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         if (xmvis->mesa_visual.rgbMode)            *value = GLX_RGBA_BIT;         else            *value = GLX_COLOR_INDEX_BIT;         break;      case GLX_X_RENDERABLE_SGIX:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = True; /* XXX really? */         break;      case GLX_FBCONFIG_ID_SGIX:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = xmvis->visinfo->visualid;         break;      case GLX_MAX_PBUFFER_WIDTH:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         /* XXX or MAX_WIDTH? */         *value = DisplayWidth(xmvis->display, xmvis->visinfo->screen);         break;      case GLX_MAX_PBUFFER_HEIGHT:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = DisplayHeight(xmvis->display, xmvis->visinfo->screen);         break;      case GLX_MAX_PBUFFER_PIXELS:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = DisplayWidth(xmvis->display, xmvis->visinfo->screen) *                  DisplayHeight(xmvis->display, xmvis->visinfo->screen);         break;      case GLX_VISUAL_ID:         if (!fbconfig)            return GLX_BAD_ATTRIBUTE;         *value = xmvis->visinfo->visualid;         break;#ifdef GLX_EXT_texture_from_pixmap      case GLX_BIND_TO_TEXTURE_RGB_EXT:         *value = True; /*XXX*/         break;      case GLX_BIND_TO_TEXTURE_RGBA_EXT:         /* XXX review */         *value = xmvis->mesa_visual.alphaBits > 0 ? True : False;         break;      case GLX_BIND_TO_MIPMAP_TEXTURE_EXT:         *value = True; /*XXX*/         break;      case GLX_BIND_TO_TEXTURE_TARGETS_EXT:         *value = (GLX_TEXTURE_1D_BIT_EXT |                   GLX_TEXTURE_2D_BIT_EXT |                   GLX_TEXTURE_RECTANGLE_BIT_EXT); /*XXX*/         break;      case GLX_Y_INVERTED_EXT:         *value = True; /*XXX*/         break;#endif      default:	 return GLX_BAD_ATTRIBUTE;   }   return Success;}static intFake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,                   int attrib, int *value ){   XMesaVisual xmvis;   int k;   if (!dpy || !visinfo)      return GLX_BAD_ATTRIBUTE;   xmvis = find_glx_visual( dpy, visinfo );   if (!xmvis) {      /* this visual wasn't obtained with glXChooseVisual */      xmvis = create_glx_visual( dpy, visinfo );      if (!xmvis) {	 /* this visual can't be used for GL rendering */	 if (attrib==GLX_USE_GL) {	    *value = (int) False;	    return 0;	 }	 else {	    return GLX_BAD_VISUAL;	 }      }   }   k = get_config(xmvis, attrib, value, GL_FALSE);   return k;}static voidFake_glXWaitGL( void ){   XMesaContext xmesa = XMesaGetCurrentContext();   XMesaFlush( xmesa );}static voidFake_glXWaitX( void ){   XMesaContext xmesa = XMesaGetCurrentContext();   XMesaFlush( xmesa );}static const char *get_extensions( void ){#ifdef FX   const char *fx = _mesa_getenv("MESA_GLX_FX");   if (fx && fx[0] != 'd') {      return EXTENSIONS;   }#endif   return EXTENSIONS + 23; /* skip "GLX_MESA_set_3dfx_mode" */}/* GLX 1.1 and later */static const char *Fake_glXQueryExtensionsString( Display *dpy, int screen ){   (void) dpy;   (void) screen;   return get_extensions();}/* GLX 1.1 and later */static const char *Fake_glXQueryServerString( Display *dpy, int screen, int name ){   static char version[1000];   _mesa_sprintf(version, "%d.%d %s",                 SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION, MESA_GLX_VERSION);   (void) dpy;   (void) screen;   switch (name) {      case GLX_EXTENSIONS:         return get_extensions();      case GLX_VENDOR:	 return VENDOR;      case GLX_VERSION:	 return version;      default:         return NULL;   }}/* GLX 1.1 and later */static const char *Fake_glXGetClientString( Display *dpy, int name ){   static char version[1000];   _mesa_sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION,                 CLIENT_MINOR_VERSION, MESA_GLX_VERSION);   (void) dpy;   switch (name) {      case GLX_EXTENSIONS:         return get_extensions();      case GLX_VENDOR:	 return VENDOR;      case GLX_VERSION:	 return version;      default:         return NULL;   }}/* * GLX 1.3 and later */static intFake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,                           int attribute, int *value ){   XMesaVisual v = (XMesaVisual) config;   (void) dpy;   (void) config;   if (!dpy || !config || !value)      return -1;   return get_config(v, attribute, value, GL_TRUE);}static GLXFBConfig *Fake_glXGetFBConfigs( Display *dpy, int screen, int *nelements ){   XVisualInfo *visuals, visTemplate;   const long visMask = VisualScreenMask;   int i;   /* Get list of all X visuals */   visTemplate.screen = screen;   visuals = XGetVisualInfo(dpy, visMask, &visTemplate, nelements);   if (*nelements > 0) {      XMesaVisual *results;      results = (XMesaVisual *) _mesa_malloc(*nelements * sizeof(XMesaVisual));      if (!results) {         *nelements = 0;         return NULL;      }      for (i = 0; i < *nelements; i++) {         results[i] = create_glx_visual(dpy, visuals + i);      }      return (GLXFBConfig *) results;   }   return NULL;}static GLXFBConfig *Fake_glXChooseFBConfig( Display *dpy, int screen,                        const int *attribList, int *nitems ){   XMesaVisual xmvis;   if (!attribList || !attribList[0]) {      /* return list of all configs (per GLX_SGIX_fbconfig spec) */      return Fake_glXGetFBConfigs(dpy, screen, nitems);   }   xmvis = choose_visual(dpy, screen, attribList, GL_TRUE);   if (xmvis) {      GLXFBConfig *config = (GLXFBConfig *) _mesa_malloc(sizeof(XMesaVisual));      if (!config) {         *nitems = 0;         return NULL;      }      *nitems = 1;      config[0] = (GLXFBConfig) xmvis;      return (GLXFBConfig *) config;   }   else {      *nitems = 0;      return NULL;   }}static XVisualInfo *Fake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config ){   if (dpy && config) {      XMesaVisual xmvis = (XMesaVisual) config;#if 0            return xmvis->vishandle;#else      /* create a new vishandle - the cached one may be stale */      xmvis->vishandle = (XVisualInfo *) _mesa_malloc(sizeof(XVisualInfo));      if (xmvis->vishandle) {         _mesa_memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo));      }      return xmvis->vishandle;#endif   }   else {      return NULL;   }}static GLXWindowFake_glXCreateWindow( Display *dpy, GLXFBConfig config, Window win,                      const int *attribList ){   XMesaVisual xmvis = (XMesaVisual) config;   XMesaBuffer xmbuf;   if (!xmvis)      return 0;   xmbuf = XMesaCreateWindowBuffer(xmvis, win);   if (!xmbuf)      return 0;#ifdef FX   /* XXX this will segfault if actually called */   FXcreateContext(xmvis, win, NULL, xmbuf);#endif   (void) dpy;   (void) attribList;  /* Ignored in GLX 1.3 */   return win;  /* A hack for now */}static voidFake_glXDestroyWindow( Display *dpy, GLXWindow window ){   XMesaBuffer b = XMesaFindBuffer(dpy, (XMesaDrawable) window);   if (b)      XMesaDestroyBuffer(b);   /* don't destroy X window */}/* XXX untested */static GLXPixmapFake_glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap,                      const int *attribList ){   XMesaVisual v = (XMesaVisual) config;   XMesaBuffer b;   const int *attr;   int target = 0, format = 0, mipmap = 0;   int value;   if (!dpy || !config || !pixmap)      return 0;   for (attr = attribList; *attr; attr++) {      switch (*attr) {      case GLX_TEXTURE_FORMAT_EXT:         attr++;         switch (*attr) {         case GLX_TEXTURE_FORMAT_NONE_EXT:         case GLX_TEXTURE_FORMAT_RGB_EXT:         case GLX_TEXTURE_FORMAT_RGBA_EXT:            format = *attr;            break;         default:            /* error */            return 0;         }         break;      case GLX_TEXTURE_TARGET_EXT:         attr++;         switch (*attr) {         case GLX_TEXTURE_1D_EXT:         case GLX_TEXTURE_2D_EXT:         case GLX_TEXTURE_RECTANGLE_EXT:            target = *attr;            break;         default:            /* error */            return 0;         }         break;      case GLX_MIPMAP_TEXTURE_EXT:         attr++;         if (*attr)            mipmap = 1;         break;      default:         /* error */         return 0;      }   }   if (format == GLX_TEXTURE_FORMAT_RGB_EXT) {      if (get_config(v, GLX_BIND_TO_TEXTURE_RGB_EXT,                     &value, GL_TRUE) != Success          || !value) {         return 0; /* error! */      }   }   else if (format == GLX_TEXTURE_FORMAT_RGBA_EXT) {      if (get_config(v, GLX_BIND_TO_TEXTURE_RGBA_EXT,                     &value, GL_TRUE) != Success          || !value) {         return 0; /* error! */      }   }   if (mipmap) {      if (get_config(v, GLX_BIND_TO_MIPMAP_TEXTURE_EXT,                     &value, GL_TRUE) != Success          || !value) {         return 0; /* error! */      }   }   if (target == GLX_TEXTURE_1D_EXT) {      if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT,                     &value, GL_TRUE) != Success          || (value & GLX_TEXTURE_1D_BIT_EXT) == 0) {         return 0; /* error! */      }   }   else if (target == GLX_TEXTURE_2D_EXT) {      if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT,                     &value, GL_TRUE) != Success          || (value & GLX_TEXTURE_2D_BIT_EXT) == 0) {         return 0; /* error! */      }   }   if (target == GLX_TEXTURE_RECTANGLE_EXT) {      if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT,                     &value, GL_TRUE) != Success          || (value & GLX_TEXTURE_RECTANGLE_BIT_EXT) == 0) {         return 0; /* error! */      }   }   if (format || target || mipmap) {      /* texture from pixmap */      b = XMesaCrea

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -