aboutsummaryrefslogtreecommitdiffstats
path: root/progs/xdemos/pbinfo.c
blob: d4bc7e808363b45afa32238686a9961105cbb120 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125

/*
 * Print list of fbconfigs and test each to see if a pbuffer can be created
 * for that config.
 *
 * Brian Paul
 * April 1997
 * Updated on 5 October 2002.
 */


#include <X11/Xlib.h>
#include <stdio.h>
#include <string.h>
#include "pbutil.h"




static void
PrintConfigs(Display *dpy, int screen, Bool horizFormat)
{
   FBCONFIG *fbConfigs;
   int nConfigs;
   int i;
   /* Note: you may want to tweek the attribute list to select a different
    * set of fbconfigs.
    */
   int fbAttribs[] = {
                      GLX_RENDER_TYPE, 0,
		      GLX_DRAWABLE_TYPE, 0,
#if 0
                      GLX_RENDER_TYPE, GLX_RGBA_BIT,
		      GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
		      GLX_RED_SIZE, 1,
		      GLX_GREEN_SIZE, 1,
		      GLX_BLUE_SIZE, 1,
		      GLX_DEPTH_SIZE, 1,
		      GLX_DOUBLEBUFFER, 0,
		      GLX_STENCIL_SIZE, 0,
#endif
		      None};


   /* Get list of possible frame buffer configurations */
   fbConfigs = ChooseFBConfig(dpy, screen, fbAttribs, &nConfigs);
   if (!nConfigs || !fbConfigs) {
      printf("Error: glxChooseFBConfig failed\n");
      return;
   }

   printf("Number of fbconfigs: %d\n", nConfigs);

   if (horizFormat) {
      printf("  ID  VisualType  Depth Lvl RGB CI DB Stereo  R  G  B  A");
      printf("   Z  S  AR AG AB AA  MSbufs MSnum  Pbuffer  Float\n");
   }

   /* Print config info */
   for (i=0;i<nConfigs;i++) {
      PrintFBConfigInfo(dpy, screen, fbConfigs[i], horizFormat);
   }

   /* free the list */
   XFree(fbConfigs);
}



static void
PrintUsage(void)
{
   printf("Options:\n");
   printf("  -display <display-name>  specify X display name\n");
   printf("  -t                       print in tabular format\n");
   printf("  -v                       print in verbose format\n");
   printf("  -help                    print this information\n");
}


int
main(int argc, char *argv[])
{
   Display *dpy;
   int scrn;
   char *dpyName = NULL;
   Bool horizFormat = True;
   int i;

   for (i=1; i<argc; i++) {
      if (strcmp(argv[i],"-display")==0) {
	 if (i+1<argc) {
	    dpyName = argv[i+1];
	    i++;
	 }
      }
      else if (strcmp(argv[i],"-t")==0) {
	 /* tabular format */
	 horizFormat = True;
      }
      else if (strcmp(argv[i],"-v")==0) {
	 /* verbose format */
	 horizFormat = False;
      }
      else if (strcmp(argv[i],"-help")==0) {
	 PrintUsage();
	 return 0;
      }
      else {
	 printf("Unknown option: %s\n", argv[i]);
      }
   }

   dpy = XOpenDisplay(dpyName);

   if (!dpy) {
      printf("Error: couldn't open display %s\n", dpyName ? dpyName : ":0");
      return 1;
   }

   scrn = DefaultScreen(dpy);
   PrintConfigs(dpy, scrn, horizFormat);
   XCloseDisplay(dpy);
   return 0;
}