/** Open a connection to the X server. */ void OpenConnection(void) { display = JXOpenDisplay(displayString); if(JUNLIKELY(!display)) { if(displayString) { printf("error: could not open display %s\n", displayString); } else { printf("error: could not open display\n"); } DoExit(1); } rootScreen = DefaultScreen(display); rootWindow = RootWindow(display, rootScreen); rootWidth = DisplayWidth(display, rootScreen); rootHeight = DisplayHeight(display, rootScreen); rootDepth = DefaultDepth(display, rootScreen); rootVisual = DefaultVisual(display, rootScreen); rootColormap = DefaultColormap(display, rootScreen); rootGC = DefaultGC(display, rootScreen); colormapCount = MaxCmapsOfScreen(ScreenOfDisplay(display, rootScreen)); XSetGraphicsExposures(display, rootGC, False); }
void __glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap, int isRGB) { #if defined(WIN32) if (vi->dwFlags & PFD_NEED_PALETTE || vi->iPixelType==PFD_TYPE_COLORINDEX) { *colormap = __glutAssociateColormap(vi); *cmap = (*colormap)->cmap; } else { *colormap = NULL; *cmap = 0; } #else Status status; XStandardColormap *standardCmaps; int i, numCmaps; static Atom hpColorRecoveryAtom = -1; switch (vi->class) { case PseudoColor: if (isRGB) { /* Mesa might return a PseudoColor visual for RGB mode. */ *colormap = NULL; if (MaxCmapsOfScreen(DefaultScreenOfDisplay(__glutDisplay)) == 1 && vi->visual == DefaultVisual(__glutDisplay, __glutScreen)) { char *private = getenv("MESA_PRIVATE_CMAP"); if (private) { /* User doesn't want to share colormaps. */ *cmap = XCreateColormap(__glutDisplay, __glutRoot, vi->visual, AllocNone); } else { /* Share the root colormap. */ *cmap = DefaultColormap(__glutDisplay, __glutScreen); } } else {
/* * Allocate a "nice" colormap. This could be better (HP-CR support, etc). */ static Colormap alloc_colormap(Display *dpy, Window parent, Visual *vis) { Screen *scr = DefaultScreenOfDisplay(dpy); int scrnum = DefaultScreen(dpy); if (MaxCmapsOfScreen(scr)==1 && vis==DefaultVisual(dpy, scrnum)) { /* The window and root are of the same visual type so */ /* share the root colormap. */ return DefaultColormap(dpy, scrnum); } else { return XCreateColormap(dpy, parent, vis, AllocNone); } }
static Colormap getColormap(Display * dsp, XVisualInfo * vi, WINTYPE Req_Win_Type) { Status status; XStandardColormap *standardCmaps; int i, numCmaps; switch (vi->class) { case PseudoColor: if (Req_Win_Type >= 4) { if (MaxCmapsOfScreen(DefaultScreenOfDisplay(dsp)) == 1 && vi->visual == DefaultVisual(dsp, vi->screen)) { /* * Share the root colormap. */ return (DefaultColormap(dsp, vi->screen)); } else { /* * Get our own PseudoColor colormap. */ return (XCreateColormap(dsp, RootWindow(dsp, vi->screen), vi->visual, AllocNone)); } } else { /* * CI mode, real GLX never returns a PseudoColor visual * for RGB mode. */ return (XCreateColormap(dsp, RootWindow(dsp, vi->screen), vi->visual, AllocAll)); } break; case TrueColor: case DirectColor: status = XmuLookupStandardColormap(dsp, vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP, /* * replace */ False, /* retain */ True); if (status == 1) { status = XGetRGBColormaps(dsp, RootWindow(dsp, vi->screen), &standardCmaps, &numCmaps, XA_RGB_DEFAULT_MAP); if (status == 1) for (i = 0; i < numCmaps; i++) if (standardCmaps[i].visualid == vi->visualid) { Colormap cmap; cmap = standardCmaps[i].colormap; XFree(standardCmaps); return (cmap); } } /* * If no standard colormap but TrueColor, just make a * private one. */ return (XCreateColormap(dsp, RootWindow(dsp, vi->screen), vi->visual, AllocNone)); break; case StaticColor: case StaticGray: case GrayScale: /* * Mesa supports these visuals */ return (XCreateColormap(dsp, RootWindow(dsp, vi->screen), vi->visual, AllocNone)); break; default: fprintf(stderr, "could not allocate colormap for visual type: %d.", vi->class); exit(-1); } return ((Colormap)NULL); }
int XMaxCmapsOfScreen(Screen *s) { return (MaxCmapsOfScreen(s)); }