From 3fa13524288087a1d259e48f0dc5f65eeffd11fb Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 18 Jan 2003 03:03:44 +0000 Subject: [PATCH] blef --- otk/rendercontrol.hh | 2 -- otk/truerendercontrol.cc | 61 +++++----------------------------------- 2 files changed, 7 insertions(+), 56 deletions(-) diff --git a/otk/rendercontrol.hh b/otk/rendercontrol.hh index f48f7057..efa16fd0 100644 --- a/otk/rendercontrol.hh +++ b/otk/rendercontrol.hh @@ -16,8 +16,6 @@ class RenderControl { protected: const ScreenInfo *_screen; - // the number of bits (1-255) that each shade of color spans across. best - // case is 1, which gives 255 shades int _red_bits; int _green_bits; int _blue_bits; diff --git a/otk/truerendercontrol.cc b/otk/truerendercontrol.cc index 0b033955..49ed9643 100644 --- a/otk/truerendercontrol.cc +++ b/otk/truerendercontrol.cc @@ -36,14 +36,11 @@ TrueRenderControl::TrueRenderControl(const ScreenInfo *screen) while (! (green_mask & 1)) { _green_offset++; green_mask >>= 1; } while (! (blue_mask & 1)) { _blue_offset++; blue_mask >>= 1; } - // use the mask to determine the number of bits for each shade of color - // so, best case, red_mask == 0xff (255), with each bit as a different - // shade! + // scale available colorspace to match our 256x256x256 cube _red_bits = 255 / red_mask; _green_bits = 255 / green_mask; _blue_bits = 255 / blue_mask; - // compute color tables, based on the number of bits for each shade for (int i = 0; i < 256; i++) { _red_color_table[i] = i / _red_bits; _green_color_table[i] = i / _green_bits; @@ -58,54 +55,8 @@ TrueRenderControl::~TrueRenderControl() } -static inline -void assignPixel(unsigned int bit_depth, unsigned char **data, unsigned long pixel) { - unsigned char *pixel_data = *data; - switch (bit_depth) { - case 8: // 8bpp - *pixel_data++ = pixel; - break; - - case 16: // 16bpp LSB - *pixel_data++ = pixel; - *pixel_data++ = pixel >> 8; - break; - - case 17: // 16bpp MSB - *pixel_data++ = pixel >> 8; - *pixel_data++ = pixel; - break; - - case 24: // 24bpp LSB - *pixel_data++ = pixel; - *pixel_data++ = pixel >> 8; - *pixel_data++ = pixel >> 16; - break; - - case 25: // 24bpp MSB - *pixel_data++ = pixel >> 16; - *pixel_data++ = pixel >> 8; - *pixel_data++ = pixel; - break; - - case 32: // 32bpp LSB - *pixel_data++ = pixel; - *pixel_data++ = pixel >> 8; - *pixel_data++ = pixel >> 16; - *pixel_data++ = pixel >> 24; - break; - - case 33: // 32bpp MSB - *pixel_data++ = pixel >> 24; - *pixel_data++ = pixel >> 16; - *pixel_data++ = pixel >> 8; - *pixel_data++ = pixel; - break; - } - *data = pixel_data; // assign back so we don't lose our place -} - -void renderPixel(XImage *im, unsigned char *dp, unsigned long pixel) +static inline void renderPixel(XImage *im, unsigned char *dp, + unsigned long pixel) { unsigned int bpp = im->bits_per_pixel + (im->byte_order == MSBFirst) ? 1 : 0; @@ -143,6 +94,8 @@ void renderPixel(XImage *im, unsigned char *dp, unsigned long pixel) *dp++ = pixel >> 8; *dp++ = pixel; break; + default: + assert(false); // wtf? } } @@ -160,7 +113,7 @@ void TrueRenderControl::render(Widget *wi) //GC gc = XCreateGC(**display, _screen->rootWindow(), GCCapStyle, &gcv); // XXX + 1? - unsigned char *data = new unsigned char[im->bytes_per_line * (h + 1)]; + unsigned char *data = new unsigned char[im->bytes_per_line * h]; unsigned char *dp = data; for (int x = 0; x < w; ++x, dp += im->bits_per_pixel/8) @@ -175,7 +128,7 @@ void TrueRenderControl::render(Widget *wi) for (int x = 0; x < w; ++x, dp += im->bits_per_pixel/8) renderPixel(im, dp, _blue_color_table[x] << _blue_offset); - printf("\nDone\n"); + printf("\nDone %d %d\n", im->bytes_per_line * h, dp - data); im->data = (char*) data; -- 2.39.2