]> Dogcows Code - chaz/openbox/commitdiff
use a bitshift on the rgb values instead of a color table
authorDana Jansens <danakj@orodu.net>
Sat, 18 Jan 2003 06:12:29 +0000 (06:12 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 18 Jan 2003 06:12:29 +0000 (06:12 +0000)
otk/rendercontrol.hh
otk/truerendercontrol.cc
otk/truerendercontrol.hh

index c619597fcd250b0141a80c6f9683d37af6221043..371198468107ff585af072e841127faa65dc1424 100644 (file)
@@ -17,16 +17,14 @@ class RenderControl {
 protected:
   const ScreenInfo *_screen;
 
-  int _red_bits;
-  int _green_bits;
-  int _blue_bits;
-
+  /*
   // color tables, meaning, 256 (possibly) different shades of each color,
   // based on the number of bits there are available for each color in the
   // visual
   unsigned char _red_color_table[256];
   unsigned char _green_color_table[256];
   unsigned char _blue_color_table[256];
+  */
 
 /*
   Bool _dither;
index e23b2ef60380f6d1f484021614e940aac5f959f7..a1995c4ce7032d76e367c550ff3b53b2bdafba93 100644 (file)
@@ -35,20 +35,14 @@ TrueRenderControl::TrueRenderControl(const ScreenInfo *screen)
   green_mask = screen->visual()->green_mask;
   blue_mask = screen->visual()->blue_mask;
 
-  while (! (red_mask & 1)) { _red_offset++; red_mask >>= 1; }
+  while (! (red_mask & 1))   { _red_offset++;   red_mask   >>= 1; }
   while (! (green_mask & 1)) { _green_offset++; green_mask >>= 1; }
-  while (! (blue_mask & 1)) { _blue_offset++; blue_mask >>= 1; }
+  while (! (blue_mask & 1))  { _blue_offset++;  blue_mask  >>= 1; }
 
-  // scale available colorspace to match our 256x256x256 cube
-  _red_bits = 255 / red_mask;
-  _green_bits = 255 / green_mask;
-  _blue_bits = 255 / blue_mask;
-
-  for (int i = 0; i < 256; i++) {
-    _red_color_table[i] = i / _red_bits;
-    _green_color_table[i] = i / _green_bits;
-    _blue_color_table[i] = i / _blue_bits;
-  }
+  _red_shift = _green_shift = _blue_shift = 8;
+  while (red_mask)   { red_mask   >>= 1; _red_shift--;   }
+  while (green_mask) { green_mask >>= 1; _green_shift--; }
+  while (blue_mask)  { blue_mask  >>= 1; _blue_shift--;  }
 }
 
 TrueRenderControl::~TrueRenderControl()
@@ -117,15 +111,13 @@ void TrueRenderControl::drawBackground(Surface *sf,
 
   for (int y = 0; y < h/3; ++y)
     for (int x = 0; x < w; ++x, dp += im->bits_per_pixel/8)
-      renderPixel(im, dp, _red_color_table[255*x/w] << _red_offset);
+      renderPixel(im, dp, (255*x/w) << _red_offset << _red_shift);
   for (int y = 0; y < h/3; ++y)
     for (int x = 0; x < w; ++x, dp += im->bits_per_pixel/8)
-      renderPixel(im, dp, _green_color_table[255*x/w] << _green_offset);
+      renderPixel(im, dp, (255*x/w) << _green_offset << _green_shift);
   for (int y = 0; y < h/3; ++y)
     for (int x = 0; x < w; ++x, dp += im->bits_per_pixel/8)
-      renderPixel(im, dp, _blue_color_table[255*x/w] << _blue_offset);
-
-  printf("\nDone %d %d\n", im->bytes_per_line * h, dp - data);
+      renderPixel(im, dp, (255*x/w) << _blue_offset << _blue_shift);
 
   im->data = (char*) data;
   
index af057be8473f4fb1c86753f37fa3c6249557d9f7..dfa0aa34226401004bf2a35fefd3a4fde3c447a3 100644 (file)
@@ -13,6 +13,13 @@ private:
   int _green_offset;
   int _blue_offset;
 
+  // the number of bits to shift a color value (from 0-255) to fit it into the
+  // the color mask
+  int _red_shift;
+  int _green_shift;
+  int _blue_shift;
+
+
 public:
   TrueRenderControl(const ScreenInfo *screen);
   virtual ~TrueRenderControl();
This page took 0.024427 seconds and 4 git commands to generate.