exlights(3alleg4)                Allegro manual                exlights(3alleg4)

       exlights - One way to do colored lighting effects in a hicolor video
       mode. Allegro game programming library.

       #include <allegro.h>

       Example exlights

       This program shows one way to implement colored lighting effects in a
       hicolor video mode. Warning: it is not for the faint of heart!  This is
       by no means the simplest or easiest to understand method, I just thought
       it was a cool concept that would be worth demonstrating.

       The basic approach is to select a 15 or 16 bit screen mode, but then draw
       onto 24 bit memory bitmaps. Since we only need the bottom 5 bits of each
       8 bit color in order to store 15 bit data within a 24 bit location, we
       can fit a light level into the top 3 bits.  The tricky bit is that these
       aren't actually 24 bit images at all: they are implemented as 8 bit
       memory bitmaps, and we just store the red level in one pixel, green in
       the next, and blue in the next, making the total image be three times
       wider than we really wanted.  This allows us to use all the normal 256
       color graphics routines for drawing onto our memory surfaces, most
       importantly the lookup table translucency, which can be used to combine
       the low 5 bits of color and the top 3 bits of light in a single drawing
       operation.  Some trickery is needed to load 24 bit data into this fake 8
       bit format, and of course it needs a custom routine to convert the
       resulting image while copying it across to the hardware screen.

       This program chugs slightly on my p133, but not significantly worse than
       any double buffering in what amounts to a 1920x640, 256 color resolution.
       The light blending doesn't seem to slow it down too badly, so I think
       this technique would be quite usable on faster machines and in lower
       resolution hicolor modes. The biggest problem is that although you keep
       the full 15 bit color resolution, you only get 3 bits of light, ie. 8
       light levels.  You can do some nice colored light patches, but smooth
       gradients aren't going to work too well :-)

       BITMAP(3alleg4), COLOR_MAP(3alleg4), END_OF_MAIN(3alleg4),
       PALETTE(3alleg4), SCREEN_H(3alleg4), SCREEN_W(3alleg4),
       allegro_error(3alleg4), allegro_init(3alleg4), allegro_message(3alleg4),
       bitmap_color_depth(3alleg4), blit(3alleg4), bmp_unwrite_line(3alleg4),
       bmp_write_line(3alleg4), circlefill(3alleg4), clear_bitmap(3alleg4),
       clear_keybuf(3alleg4), color_map(3alleg4), create_bitmap_ex(3alleg4),
       destroy_bitmap(3alleg4), draw_trans_sprite(3alleg4), fixatan2(3alleg4),
       fixsqrt(3alleg4), fixtoi(3alleg4), getb_depth(3alleg4),
       getg_depth(3alleg4), getpixel(3alleg4), getr_depth(3alleg4),
       hsv_to_rgb(3alleg4), install_keyboard(3alleg4), install_mouse(3alleg4),
       install_timer(3alleg4), itofix(3alleg4), key(3alleg4),
       keypressed(3alleg4), line(3alleg4), load_bitmap(3alleg4),
       makecol(3alleg4), mouse_x(3alleg4), mouse_y(3alleg4),
       poll_mouse(3alleg4), replace_filename(3alleg4), retrace_count(3alleg4),
       screen(3alleg4), select_palette(3alleg4), set_color_conversion(3alleg4),
       set_color_depth(3alleg4), set_gfx_mode(3alleg4)

Allegro                           version 4.4.3                exlights(3alleg4)