glxinfo: Print drawable type in verbose mode
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 14 Apr 2010 14:06:01 +0000 (10:06 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 14 Apr 2010 14:07:15 +0000 (10:07 -0400)
progs/xdemos/glxinfo.c

index 332f5c2f4633ea7f029bd52045728c8361f89470..b656e58924e4006da1ec74d74b084d697f95568a 100644 (file)
@@ -80,6 +80,7 @@ struct visual_attribs
 
    /* GL visual attribs */
    int supportsGL;
+   int drawableType;
    int transparentType;
    int transparentRedValue;
    int transparentGreenValue;
@@ -585,6 +586,28 @@ visual_class_name(int cls)
    }
 }
 
+static const char *
+visual_drawable_type(int type)
+{
+   static char buffer[256], *p;
+   const static struct { int bit; const char *name; } bits[] = {
+      { GLX_WINDOW_BIT, "window" },
+      { GLX_PIXMAP_BIT, "pixmap" },
+      { GLX_PBUFFER_BIT, "pbuffer" }
+   };
+   int i;
+
+   p = buffer;
+   for (i = 0; i < 3; i++) {
+      if (p > buffer)
+        *p++ = ',';
+      if (type & bits[i].bit)
+        strcpy(p, bits[i].name);
+      p += strlen(bits[i].name);
+   }
+
+   return buffer;
+}
 
 static const char *
 visual_class_abbrev(int cls)
@@ -655,6 +678,7 @@ get_visual_attribs(Display *dpy, XVisualInfo *vInfo,
    else
       attribs->render_type = GLX_COLOR_INDEX_BIT;
    
+   glXGetConfig(dpy, vInfo, GLX_DRAWABLE_TYPE, &attribs->drawableType);
    glXGetConfig(dpy, vInfo, GLX_DOUBLEBUFFER, &attribs->doubleBuffer);
    glXGetConfig(dpy, vInfo, GLX_STEREO, &attribs->stereo);
    glXGetConfig(dpy, vInfo, GLX_AUX_BUFFERS, &attribs->auxBuffers);
@@ -753,6 +777,7 @@ get_fbconfig_attribs(Display *dpy, GLXFBConfig fbconfig,
    glXGetFBConfigAttrib(dpy, fbconfig, GLX_X_VISUAL_TYPE, &visual_type);
    attribs->klass = glx_token_to_visual_class(visual_type);
 
+   glXGetFBConfigAttrib(dpy, fbconfig, GLX_DRAWABLE_TYPE, &attribs->drawableType);
    glXGetFBConfigAttrib(dpy, fbconfig, GLX_BUFFER_SIZE, &attribs->bufferSize);
    glXGetFBConfigAttrib(dpy, fbconfig, GLX_LEVEL, &attribs->level);
    glXGetFBConfigAttrib(dpy, fbconfig, GLX_RENDER_TYPE, &attribs->render_type);
@@ -798,8 +823,9 @@ get_fbconfig_attribs(Display *dpy, GLXFBConfig fbconfig,
 static void
 print_visual_attribs_verbose(const struct visual_attribs *attribs)
 {
-   printf("Visual ID: %x  depth=%d  class=%s\n",
-          attribs->id, attribs->depth, visual_class_name(attribs->klass));
+   printf("Visual ID: %x  depth=%d  class=%s, type=%s\n",
+          attribs->id, attribs->depth, visual_class_name(attribs->klass),
+         visual_drawable_type(attribs->drawableType));
    printf("    bufferSize=%d level=%d renderType=%s doubleBuffer=%d stereo=%d\n",
           attribs->bufferSize, attribs->level,
          visual_render_type_name(attribs->render_type),