summaryrefslogtreecommitdiffstats
path: root/src/glut/glx/glut_cmap.c
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2006-09-21 15:14:30 +0000
committerBrian Paul <[email protected]>2006-09-21 15:14:30 +0000
commitb7d9b1e724b9e7b91679ba7b0608d72938e259da (patch)
tree3b5cec3a897807c820d2f10f9613d277de32ea18 /src/glut/glx/glut_cmap.c
parent167ca59fe893a62e23e799f51608d18847dd590a (diff)
new code to init DirectColor colormaps
Diffstat (limited to 'src/glut/glx/glut_cmap.c')
-rw-r--r--src/glut/glx/glut_cmap.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/glut/glx/glut_cmap.c b/src/glut/glx/glut_cmap.c
index 1c496ad66da..a6ff1267dc2 100644
--- a/src/glut/glx/glut_cmap.c
+++ b/src/glut/glx/glut_cmap.c
@@ -177,7 +177,6 @@ __glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap)
}
break;
case TrueColor:
- case DirectColor:
*colormap = NULL; /* NULL if RGBA */
/* Hewlett-Packard supports a feature called "HP Color
@@ -254,6 +253,28 @@ __glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap)
*cmap = XCreateColormap(__glutDisplay, __glutRoot,
vi->visual, AllocNone);
break;
+ case DirectColor:
+ *colormap = NULL; /* NULL if RGBA */
+ *cmap = XCreateColormap(__glutDisplay, __glutRoot,
+ vi->visual, AllocAll);
+ if (vi->depth == 24) {
+ /* init the red, green, blue maps to linear ramps */
+ XColor xc[256];
+ int i;
+ for (i = 0; i < 256; i++) {
+ xc[i].pixel = (i << 16) | (i << 8) | i;
+ xc[i].red = (i << 8) | i;
+ xc[i].green = (i << 8) | i;
+ xc[i].blue = (i << 8) | i;
+ xc[i].flags = DoRed | DoGreen | DoBlue;
+ }
+ XStoreColors(__glutDisplay, *cmap, xc, 256);
+ }
+ else {
+ fprintf(stderr, "GLUT Error: DirectColor visuals other than 24-bits "
+ "not fully supported.\n");
+ }
+ break;
case StaticColor:
case StaticGray:
case GrayScale: