new code to init DirectColor colormaps
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 21 Sep 2006 15:14:30 +0000 (15:14 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 21 Sep 2006 15:14:30 +0000 (15:14 +0000)
src/glut/glx/glut_cmap.c

index 1c496ad66da70e86a27ca58faa8f75c6640065cc..a6ff1267dc25eb324332e4e20d8447086e5ae109 100644 (file)
@@ -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: