summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-18 06:12:29 +0000
committerDana Jansens <danakj@orodu.net>2003-01-18 06:12:29 +0000
commita4dd208a7955e25bca710d4bcf355de7e608b9e1 (patch)
treee0e68aec8af1afd47bf5f5b0bda2273c86f697cf
parente2607f616d8ab2abd494af74f0a53de7c658110f (diff)
use a bitshift on the rgb values instead of a color table
-rw-r--r--otk/rendercontrol.hh6
-rw-r--r--otk/truerendercontrol.cc26
-rw-r--r--otk/truerendercontrol.hh7
3 files changed, 18 insertions, 21 deletions
diff --git a/otk/rendercontrol.hh b/otk/rendercontrol.hh
index c619597f..37119846 100644
--- a/otk/rendercontrol.hh
+++ b/otk/rendercontrol.hh
@@ -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;
diff --git a/otk/truerendercontrol.cc b/otk/truerendercontrol.cc
index e23b2ef6..a1995c4c 100644
--- a/otk/truerendercontrol.cc
+++ b/otk/truerendercontrol.cc
@@ -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;
diff --git a/otk/truerendercontrol.hh b/otk/truerendercontrol.hh
index af057be8..dfa0aa34 100644
--- a/otk/truerendercontrol.hh
+++ b/otk/truerendercontrol.hh
@@ -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();