void ui_get_screen_res(int *x0, int *y0, int *width, int *height, int monitor) { int i, n, x, y, di; unsigned int du; Window dw; XRRScreenResources *sr; XRRCrtcInfo *ci = NULL; if (getenv("JGMENU_SCREEN_INFO")) print_screen_info(); sr = XRRGetScreenResources(ui->dpy, DefaultRootWindow(ui->dpy)); BUG_ON(!sr); n = sr->ncrtc; /* * Global variable config.monitor let's the user specify a monitor. * If not set, we use the current pointer position */ if (monitor) { if (monitor > n) die("cannot connect to monitor '%d'", monitor); ci = XRRGetCrtcInfo(ui->dpy, sr, sr->crtcs[monitor - 1]); if (!ci->noutput) die("cannot connect to monitor '%d'", monitor); info("using user specified monitor '%d'", monitor); goto monitor_selected; } XQueryPointer(ui->dpy, ui->root, &dw, &dw, &x, &y, &di, &di, &du); for (i = 0; i < n; i++) { if (ci) XRRFreeCrtcInfo(ci); ci = XRRGetCrtcInfo(ui->dpy, sr, sr->crtcs[i]); BUG_ON(!ci); if (!ci->noutput) continue; if (intersect(x, y, 1, 1, ci)) { info("using monitor '%d'", i + 1); break; } } monitor_selected: if (!ci) die("connection could be established to monitor"); *x0 = ci->x; *y0 = ci->y; *width = ci->width; *height = ci->height; XRRFreeCrtcInfo(ci); XRRFreeScreenResources(sr); }
int main(int argc, char *argv[]) { HDC hdc; InfoMode mode = Normal; GLboolean findBest = GL_FALSE; GLboolean limits = GL_FALSE; GLboolean singleLine = GL_FALSE; int i; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-t") == 0) { mode = Wide; } else if (strcmp(argv[i], "-v") == 0) { mode = Verbose; } else if (strcmp(argv[i], "-b") == 0) { findBest = GL_TRUE; } else if (strcmp(argv[i], "-l") == 0) { limits = GL_TRUE; } else if (strcmp(argv[i], "-h") == 0) { usage(); return 0; } else if(strcmp(argv[i], "-s") == 0) { singleLine = GL_TRUE; } else { printf("Unknown option `%s'\n", argv[i]); usage(); return 0; } } hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL); if (findBest) { int b; b = find_best_visual(hdc); printf("%d\n", b); } else { print_screen_info(hdc, limits, singleLine); printf("\n"); print_visual_info(hdc, mode); } return 0; }
int main(int argc, char *argv[]) { char *displayName = NULL; Display *dpy; int numScreens, scrnum; InfoMode mode = Normal; GLboolean findBest = GL_FALSE; GLboolean limits = GL_FALSE; Bool allowDirect = True; int i; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-display") == 0 && i + 1 < argc) { displayName = argv[i + 1]; i++; } else if (strcmp(argv[i], "-t") == 0) { mode = Wide; } else if (strcmp(argv[i], "-v") == 0) { mode = Verbose; } else if (strcmp(argv[i], "-b") == 0) { findBest = GL_TRUE; } else if (strcmp(argv[i], "-i") == 0) { allowDirect = False; } else if (strcmp(argv[i], "-l") == 0) { limits = GL_TRUE; } else if (strcmp(argv[i], "-h") == 0) { usage(); return 0; } else { printf("Unknown option `%s'\n", argv[i]); usage(); return 0; } } dpy = XOpenDisplay(displayName); if (!dpy) { fprintf(stderr, "Error: unable to open display %s\n", displayName); return -1; } if (findBest) { int b; mesa_hack(dpy, 0); b = find_best_visual(dpy, 0); printf("%d\n", b); } else { numScreens = ScreenCount(dpy); print_display_info(dpy); for (scrnum = 0; scrnum < numScreens; scrnum++) { mesa_hack(dpy, scrnum); print_screen_info(dpy, scrnum, allowDirect, limits); printf("\n"); print_visual_info(dpy, scrnum, mode); if (scrnum + 1 < numScreens) printf("\n\n"); } } XCloseDisplay(dpy); return 0; }
static Q3ListViewItem *get_gl_info(Display *dpy, int scrnum, Bool allowDirect,Q3ListViewItem *l1, Q3ListViewItem *after) { Window win; int attribSingle[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None }; int attribDouble[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, None }; XSetWindowAttributes attr; unsigned long mask; Window root; GLXContext ctx; XVisualInfo *visinfo; int width = 100, height = 100; Q3ListViewItem *result = after; root = RootWindow(dpy, scrnum); visinfo = glXChooseVisual(dpy, scrnum, attribSingle); if (!visinfo) { visinfo = glXChooseVisual(dpy, scrnum, attribDouble); if (!visinfo) { kDebug() << "Error: couldn't find RGB GLX visual\n"; return result; } } attr.background_pixel = 0; attr.border_pixel = 0; attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone); attr.event_mask = StructureNotifyMask | ExposureMask; mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; win = XCreateWindow(dpy, root, 0, 0, width, height, 0, visinfo->depth, InputOutput, visinfo->visual, mask, &attr); ctx = glXCreateContext( dpy, visinfo, NULL, allowDirect ); if (!ctx) { kDebug() << "Error: glXCreateContext failed\n"; XDestroyWindow(dpy, win); return result; } if (glXMakeCurrent(dpy, win, ctx)) { gli.serverVendor = glXQueryServerString(dpy, scrnum, GLX_VENDOR); gli.serverVersion = glXQueryServerString(dpy, scrnum, GLX_VERSION); gli.serverExtensions = glXQueryServerString(dpy, scrnum, GLX_EXTENSIONS); gli.clientVendor = glXGetClientString(dpy, GLX_VENDOR); gli.clientVersion = glXGetClientString(dpy, GLX_VERSION); gli.clientExtensions = glXGetClientString(dpy, GLX_EXTENSIONS); gli.glxExtensions = glXQueryExtensionsString(dpy, scrnum); gli.glVendor = (const char *) glGetString(GL_VENDOR); gli.glRenderer = (const char *) glGetString(GL_RENDERER); gli.glVersion = (const char *) glGetString(GL_VERSION); gli.glExtensions = (const char *) glGetString(GL_EXTENSIONS); gli.displayName = NULL; #ifdef KCMGL_DO_GLU gli.gluVersion = (const char *) gluGetString(GLU_VERSION); gli.gluExtensions = (const char *) gluGetString(GLU_EXTENSIONS); #endif IsDirect = glXIsDirect(dpy, ctx); result = print_screen_info(l1, after); } else { kDebug() << "Error: glXMakeCurrent failed\n"; glXDestroyContext(dpy, ctx); } glXDestroyContext(dpy, ctx); XDestroyWindow(dpy, win); return result; }
int main(int argc, char *argv[]) { char *displayName = NULL; Display *dpy; int numScreens, scrnum; InfoMode mode = Normal; Bool findBest = False; Bool limits = False; Bool allowDirect = True; Bool singleLine = False; Bool coreWorked; int i; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-display") == 0 && i + 1 < argc) { displayName = argv[i + 1]; i++; } else if (strcmp(argv[i], "-t") == 0) { mode = Wide; } else if (strcmp(argv[i], "-v") == 0) { mode = Verbose; } else if (strcmp(argv[i], "-b") == 0) { findBest = True; } else if (strcmp(argv[i], "-i") == 0) { allowDirect = False; } else if (strcmp(argv[i], "-l") == 0) { limits = True; } else if (strcmp(argv[i], "-h") == 0) { usage(); return 0; } else if (strcmp(argv[i], "-s") == 0) { singleLine = True; } else { printf("Unknown option `%s'\n", argv[i]); usage(); return 0; } } dpy = XOpenDisplay(displayName); if (!dpy) { fprintf(stderr, "Error: unable to open display %s\n", XDisplayName(displayName)); return -1; } if (findBest) { int b; mesa_hack(dpy, 0); b = find_best_visual(dpy, 0); printf("%d\n", b); } else { numScreens = ScreenCount(dpy); print_display_info(dpy); for (scrnum = 0; scrnum < numScreens; scrnum++) { mesa_hack(dpy, scrnum); coreWorked = print_screen_info(dpy, scrnum, allowDirect, True, False, limits, singleLine, False); print_screen_info(dpy, scrnum, allowDirect, False, False, limits, singleLine, coreWorked); print_screen_info(dpy, scrnum, allowDirect, False, True, False, singleLine, True); printf("\n"); print_visual_info(dpy, scrnum, mode); #ifdef GLX_VERSION_1_3 print_fbconfig_info(dpy, scrnum, mode); #endif if (scrnum + 1 < numScreens) printf("\n\n"); } } XCloseDisplay(dpy); return 0; }