Provided by: allegro4-doc_4.4.3.1-4.1build3_all bug

NAME

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

SYNOPSIS

       #include <allegro.h>

       Example exlights

DESCRIPTION

       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 :-)

SEE ALSO

       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)